文章
11
粉丝
27
获赞
19
访问
1.2k
佬们能不能 解答一下,对幂指数进行n%(MOD-1)的操作的原理是什么啊?
//2015涂颜色
#include<bits/stdc++.h>
using namespace std;
const int MOD=1000000007;
int main(){
string n,m;
while(cin>>n>>m){
//第一步:先对n进行n%(MOD-1)的操作,为什么???
//知识点:字符串取模运算
int lena=n.length();
long long int num=0;
for(int i=0;i<lena;i++){
num=num*10+n[i]-'0';
num=num%(MOD-1);
}
//第二步:用快速幂算法计算(2^num)%MOD
long long int ans=1;
long long int dishu=2; //dishu要用long long int型,用int型会出错
while(num!=0){
if(num%2==1) ans=(ans*dishu)%MOD; //如果是奇数,消耗掉一次幂运算
num=num/2;
// ans=(ans%MOD)*(ans%MOD); //注意这里不是结果ans自乘,而是底数自乘。
dishu=(dishu*dishu)%MOD;
}
ans=ans%MOD;
cout<<ans<<endl;
}
}
登录后发布评论
机试攻略满分篇,4.3节有讲,费马小定理