分治2--取余運算
一、心得
?
二、題目和分析
?
題目描述
輸入b,p,k的值,求bp?mod k的值。其中b,p,k*k為長整型數。
輸入
三個整數,分別為b,p,k的值
輸出
bp?mod k
樣例輸入
2 10 9
樣例輸出
2^10 mod 9=7
提示
解題思路:分治,顧名思義,把一個大問題分解為多個小問題。
這里有一個公式,利用這個公式通過遞歸求得。
?
三、代碼和結果
?
1 /* 2 遞推方程 3 邊界 4 p==0 1 5 p/2==0 f(p)=f(p/2)*f(p/2) 6 p/2==1 f(p)=f(p/2)*f(p/2)*f(1) 7 */ 8 #include <iostream> 9 #define ll long long 10 using namespace std; 11 12 ll f(ll b,ll p,ll k){ 13 if(p==0) return 1; 14 else { 15 ll tmp=f(b,p/2,k); 16 ll ans=((tmp%k)*(tmp%k))%k; 17 if(p/2==1) ans=(ans*(b%k))%k; 18 return ans; 19 } 20 } 21 22 int main(){ 23 ll b,p,k; 24 cin>>b>>p>>k; 25 cout<<f(b,p,k)<<endl; 26 return 0; 27 }
?