快速幂板子
话不多说,直入正题
题目:洛谷P1226
这里有两种方法完成此题:
第一种是用位运算,第二种是用分治
具体算法详解看https://www.luogu.org/blog/cicos/quickpow大佬的题解;
板子:
#include<bits/stdc++.h> using namespace std; int main() { long long b,p,k,ans=1; cin>>b>>p>>k; cout<<b<<"^"<<p<<" mod "<<k<<"="; while(p>0) { if(p%2==1) { ans*=b; ans%=k; } b*=b; b%=k; p=p>>1; } cout<<ans%k<<endl; return 0; }
当然,对于一些追求简洁的大佬,我们有:
typedef long long ll; ll fastmi(ll x,ll y,ll m)//求x^y%m { if(y==0) return 1; else if(y==1) return x; if(y&1) return (x+fastmi((x*2)%m,y>>1,m))%m; else return fastmi((x*2)%m,y>>1,m)%m; }