代碼
ENDINGS = [[0,0,0,0], [1,1,1,1], [2,4,8,6], [3,9,7,1], [4,6,4,6],
[5,5,5,5], [6,6,6,6], [7,9,3,1], [8,4,2,6], [9,1,9,1]]
def last_digit_of_power(digit, power)
return 1 if power.zero?
ENDINGS[digit][(power-1) % 4]
end
例子
找到讓我們試試power
等於5
,然後6
。
(5..6).each do |power|
puts "\npow = #{power}"
(0..9).each {|digit| puts "#{digit}: #{last_digit_of_power(digit, power)}"}
end
pow = 5
0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
pow = 6
0: 0
1: 1
2: 4
3: 9
4: 6
5: 5
6: 6
7: 9
8: 4
9: 1
說明
這使用如受僱於@Igor相同的算法,但我不同的方式實現它。衆所周知(並且可以很容易地證明)每個數字0-9
的最後一位數字取決於增加的功率週期數最多爲4
位數。例如,考慮數字3
。由於
[1,2,3,4,5].map { |power| 3**power }
#=> [3, 9, 27, 81, 243]
的3
最後一位數字帶到每個這樣的5
權力是[3, 9, 7, 1, 3]
。由於3**5
的最後一位數字與3**1
的最後一位數字相同,因此我們推斷比最後一位數字3**6
將與3**(6-4)
(3**2
)的最後一位數字相同,即9
等等。
現在假設我們想計算最後一位數字3**15
。我們看到它將與3**(15-4)
(3**11
)的最後一位相同,後者又將等於3**7
的最後一位數字,然後是最後一位數字3**3
,但我們已經知道最後一位數字,即7
。它遵循的3**power
最後一個數字是
[3, 9, 7, 1][(power-1) % 4]
ENDINGS
提供爲每個數字0-9
權力1-4
最後一位數字。注意週期長度是1
爲0
,1
,5
和6
,是2
爲4
和9
和是4
爲2
,3
,7
和8
。然而,對所有10
數字使用4
的週期長度是最方便的。
ENDINGS[digit]
等於digit
四個結局採取的1
,2
,3
和4
的權力。考慮到電源的數字digit
的最後一位power
因此等於
ENDINGS[digit][(power-1) % 4]
非常感謝你 – FreddieCodes