題意是求 n^m 結果的最後一位數。
可以用快速冪取模的方法做,當然本題還有更簡單的方法:
所有數字( 0 - 9 )的 m 次冪的個位數不會受進製的影響,只收到乘數的影響,所以在結果中一旦出現之前出現過的數字即可以這兩個數字之間的一段作為迴圈,0 - 9 最多十個數字,其迴圈的長度一定小於 10,計算發現各數字的規律如下:
0:0 ...
1:1 ...
2:2,4,8,6,2,...
3:3,9,7,1,3,...
4:4,6,4,...
5:5 ...
6:6 ...
7:7,9,3,1,7,...
8:8,4,2,6,8,...
9:9,1,9,...
還要注意 n 不一定是個位數,要記得取個位數。
**如下:
1 #include 2view codeusing
namespace
std;
3int
main()
413 a %= 10;14
switch
(a)15
break;28
case3:
29switch(b%4)30
break;36
case4:
37 printf("
%d\n
",b&1?4:6); break;38
case5:
39 puts("
5"); break;40
case6:
41 puts("
6"); break;42
case7:
43switch(b%4)44
break;50
case8:
51switch(b%4)52
break;58
case9:
59 printf("
%d\n
",b&1?9:1); break;60
}61}62
return0;
63 }
這是本人的比較繁瑣的方法,別人優秀的做法如下:
1 #include 2view codeusing
namespace
std;
3int d[10] = ;
4int f[10][4]=,,,,,,,,,};
5int
main()
m的n次冪的幾種解法
直接n次乘法,o n 當n為偶數時 m n m n 2 2 當n為奇數時 m n m m n 1 2 2 o logn 將n轉化為二進位制形式 n ak 2 k ak 1 2 k 1 a1 2 a0,其中ai 0 或1 i 0,1,2.k,還是見 程式設計之美 計算斐波那契 fibonacci 數列...
分治思想求解X的M次冪方
1 package main23 import 4 fmt 5 67 遞迴形式分治求解 8 func power x,m int int else 17returny18 19 20 21 迭代形式分治求解,分析可用到如下圖 x的任意m次方,可從x的一次方,開始向上迭代產生,而路徑的選擇則根據m的二...
HDU 4549 M斐波那契數列(矩陣快速冪)
m斐波那契數列 題意 f 0 a,f 1 b,f n f n 1 f n 2 給定 a,b,n 求 f n 題解 暴力打表後發現 f n a b 斐波那契數列可用矩陣快速冪求解。但是此題中n較大,fib會爆掉。這時候需要引入費馬小定理優化。證明 a x p a p 1.a x p a p 2.a x...