快速冪×快速乘
阿新 • • 發佈:2019-02-08
快速乘的速度並不能加速兩個數相乘,但是可以防止資料超過long long 而最大化速度
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 10 ll quikly1(ll ans,ll i,ll m)///快速乘 { ll an1=0; while(i) { if(i&1) { an1+=ans; an1%=m; } ans+=ans; ans%=m; i>>=1; } return an1; } ll quikly2( ll i ,ll m)///快速冪 { ///2的i次方對m取模 ll ans=1; ll x=2; while (i ) { if(i&1) { ans=quikly1(ans,x,m); } x=quikly1(x,x,m); i>>=1; } return ans; } int main() { /// 求2的n次方對m取模 long long n , m ; while (scanf("%lld%lld",&n,&m)!=EOF) { if(n==1) { printf("%lld\n",n%m); continue; } ll ans=1; ans=quikly2(n,m); //ans-=2; //while(ans<0) ans+=m; printf("%lld\n",ans); } }