信息学奥赛一本通 1326:【例7.5】 取余运算(mod) 分治算法
输入b,p,k的值,求b^p mod k的值。其中b,p,k×k为长整型数。时间限制: 1000 ms内存限制: 65536 KB。1326:【例7.5】 取余运算(mod)求b^p mod k的值。输入b,p,k的值。
·
1326:【例7.5】 取余运算(mod)
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
输入b,p,k的值,求b^p mod k的值。其中b,p,k×k为长整型数。
【输入】
输入b,p,k的值。
【输出】
求b^p mod k的值。
【输入样例】
2 10 9
【输出样例】
2^10 mod 9=7
解析:快速幂算法,可以使用递归,详见代码:
#include <bits/stdc++.h>
using namespace std;
long long f(int x,int y,int z){
if (y==0) return 1;
long long p=f(x,y/2,z);
if (y%2==1){
return p*p%z*x%z;
}else{
return p*p%z;
}
}
int main() {
long long b,p,k;
cin>>b>>p>>k;
cout<<b<<"^"<<p<<" mod "<<k<<"=";
cout<<f(b,p,k);
return 0;
}
也可以使用递推,详见代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
long long b,p,k;
cin>>b>>p>>k;
cout<<b<<"^"<<p<<" mod "<<k<<"=";
long long ans=1;
long long m=b;
while(p>0){
if (p%2==1){
ans*=m;
ans%=k;
}
p/=2;
m*=m;
m%=k;
}
cout<<ans;
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)