一個小練習,幫人做 (a^n)%k
輸入a,n,k(1<=a,n<=1e9 1<=k<=10000 ,注意:有多組測試數據,請用EOF標志判斷結束輸入):
2 32 5
2 30 5
輸出(a^n)%k的結果(a的n次方被k除的余數):
輸入a,n,k(1<=a,n<=1e9 1<=k<=10000 ,注意:有多組測試數據,請用EOF標志判斷結束輸入):
2 32 5
2 30 5
輸出(a^n)%k的結果(a的n次方被k除的余數):
要求復雜度為O(logn)
解決思路,吃屎兄的推導的
(a*b)Mod c=((a Mod c)*b)Mod c
a^b Mod c 把B寫成二進制(At ,At-1,At-2...A1,A0)
a^b Mod c =(a^(At*2^t....A0*2^0)mod c)=
((a^A0*2^0 mod c)*a^A1*2^1mod c).....
t=log2B;
下面是小弟的程序




















































posted on 2007-06-01 22:49 Gohan 閱讀(275) 評論(0) 編輯 收藏 引用 所屬分類: Practise