切換
舊版
前往
大廳
主題

ZeroJudge - e553: 10162 - Last Digit 解題心得

Not In My Back Yard | 2019-12-06 15:28:39 | 巴幣 2 | 人氣 433

題目連結:


題目大意:
給定一正整數 N (1 ≦ N ≦ 2 × 10 ^ 100,N = 0 時代表輸入結束),求 1 ^ 1 + 2 ^ 2 + 3 ^ 3 + …… + N ^ N 的最後一位數為多少?



範例輸入:
1
2
3
0


範例輸出:
1
5
2


解題思維:
觀察 2 結尾數字次方:2 ^ 2 → 4 、12 ^ 12 → 6  、22 ^ 22 → 4  、32 ^ 32 → 6 、 ……可以看到其以 4 、 6 作為循環節。

同樣地,結尾為 0 、 1 、 3 、 4 、 5 、 6 、 7 、 8 、 9 各自的循環節為:
{ 0 } 、 { 1 } 、 { 7、3 } 、 { 6 } 、 { 5 } 、 { 6 } 、 { 3 、 7 } 、 { 6 、 4 } 、 { 9 }

接著,我們可以看到 1 ^ 1 + 2 ^ 2 + 3 ^ 3 + …… + 99 ^ 99 的結尾(用上面的循環節可得出每跑過一次 0 ~ 9 ,尾數就會 + 7)為 0。

而 101 ^ 101 + 102 ^ 102 + …… + 999 ^ 999 尾數與上式等價,也同樣是 0 。其他也以此類推。

由上可知,我們可以直接取 N 的末兩位。接著,因為數字範圍(以下稱此數為 M)已被縮減到 100 以內,所以想要直接乘並總和出結果(運算過程要記得一直取 10 的餘數)是可以的。但是既然有了上面循環節的表,便可以善加利用。

將 M 寫為 D × 10 + C(其中,0 ≦ C ≦ 9)。而 D 代表已經經過了多少次的尾數 + 7 (緣由看循環節的部分)。

因此尾數為 D × 7 + (10D(含) ~ 10D + C(含)這 C + 1 個數各自的尾數之相加)取 10 的餘數即是所求。而 10D ~ 10D + C 求尾數的部分用上面循環節的對照表即可得出。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作