欢迎来到就算过了一载春秋的博客

不管过了几载春秋,我还是会偶尔想起。

【洛谷】P1226 【模板】快速幂||取余运算

题目链接

题目描述

输入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  
View Code

递归型:

 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 }
View Code

posted on 2018-08-15 17:42  就算过了一载春秋  阅读(184)  评论(0)    收藏  举报

导航