取余运算||快速幂
題目描述
輸入b,p,k的值,求b^p mod k的值。其中b,p,k*k為長(zhǎng)整型數(shù)。
輸入輸出格式
輸入格式:
三個(gè)整數(shù)b,p,k.
輸出格式:
輸出“b^p mod k=s”
s為運(yùn)算結(jié)果
思路:
顯然取余和乘法誰(shuí)都會(huì)
關(guān)鍵在于快速
我們知道乘方有一個(gè)性質(zhì)
x^n=(x^2)^(n/2)
這樣我們就能通過二分使時(shí)間復(fù)雜度降到log級(jí)別
你可能會(huì)說,n%2==1怎么辦??
和簡(jiǎn)單,再定義一個(gè)變量作為暫存器,乘一下x
這時(shí)候又有另一個(gè)定理
x^n=x^(n-1)*x
所以n可以減一
最后將暫存器和x乘起來即可
代碼:
#include<iostream> #include<cstdio> using namespace std; int a,b,s; int res=1; int pw(int j,int k) {if(k==0){res=res%s;return res;}j=j%s;if(k%2==1){res=res*j;res=res%s;k--;pw(j,k);}else{k=k/2;j=j*j;pw(j,k);} } int main() {cin>>a>>b>>s;long long x=1;x=pw(a,b);cout<<a<<"^"<<b<<" mod "<<s<<"="<<x; }
?
轉(zhuǎn)載于:https://www.cnblogs.com/ztz11/p/8973023.html
總結(jié)
- 上一篇: 《感鹤》第十二句是什么
- 下一篇: java.util.Collection