描述:m,n,k,为整数,求 (m^n)%k=?
正经代码:
#include<stdio.h>
using namespace std;
int main(){
int m,n,k;
scanf("%d%d%d",&m,&n,&k);
int ans=1;
for(;n;n>>=1,m=(long long)m*m%k)
if(n&1)
ans=(long long)ans*m%k;
printf("%d\n",ans);
return 0;
}
代码牛皮*:
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int m,n,k;
scanf("%d%d%d",&m,&n,&k);
int ans=1;
cout<<"m="<<m<<" n="<<n<<" k="<<k<<endl;
for(;n;n>>=1,m=(long long)m*m%k){
cout<<" --------\n n="<<n<<endl<<" n>>1 ="<<(n>>=1)<<endl;
cout<<" m="<<m<<endl;
if(n&1)
ans=(long long)ans*m%k;
cout<<" n&1="<<(n&1)<<endl<<" ans="<<ans<<endl;
}
printf("%d\n",ans);
return 0;
}
运行结果1,2,3,:







本文介绍了一种快速计算(m^n)%k的算法,并提供了两种不同的C++代码实现方式。一种是简洁高效的实现,另一种则增加了输出中间过程的代码,便于理解和调试。这两种实现都利用了位操作和循环来减少乘法次数,从而提高了计算效率。
11万+

被折叠的 条评论
为什么被折叠?



