题目描述
输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。
输入输出格式
输入格式:
三个整数b,p,k.
输出格式:
输出“b^p mod k=s”
s为运算结果
输入输出样例
输入样例#1: 复制
2 10 9
输出样例#1: 复制
2^10 mod 9=7
非递归型:
1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 #include<iomanip> 5 #include<vector> 6 #include<cmath> 7 #include<stack> 8 using namespace std; 9 typedef long long ll; 10 ll mod_pow(ll x,ll n,ll mod)//非递归型快速幂取模 11 { 12 ll res=1; 13 while(n>0) 14 { 15 if(n&1) res=res*x%mod; 16 x=x*x%mod; 17 n>>=1; 18 } 19 return res; 20 } 21 int main() 22 { 23 ll b,p,k; 24 cin>>b>>p>>k; 25 cout<<b<<'^'<<p<<" mod "<<k<<'='<<mod_pow(b,p,k)%k;//最后模个k是为了避免k=1的情况 26 } 27
递归型:
1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 #include<iomanip> 5 #include<vector> 6 #include<cmath> 7 #include<stack> 8 using namespace std; 9 typedef long long ll; 10 ll mod_pow(ll x,ll n,ll mod)//递归型快速幂取模 11 { 12 if(!n) return 1; 13 if(n==1) return x%mod; 14 15 ll ans=mod_pow(x,n/2,mod); 16 ans=ans*ans%mod; 17 if(n&1) ans=ans*x%mod; 18 return ans; 19 } 20 int main() 21 { 22 ll b,p,k; 23 cin>>b>>p>>k; 24 cout<<b<<'^'<<p<<" mod "<<k<<'='<<mod_pow(b,p,k)%k;//最后模个k是为了避免k=1的情况 25 }