约 10 分钟
结果很大时每步都取模防溢出,中间乘积用 long long。long long qpow(long long a,long long n,long long p){ long long r=1%p; a%=p; while(n){ if(n&1) r=r*a%p; a=a*a%p; n>>=1; } return r; }。
long long qpow(long long a,long long n,long long p){ long long r=1%p; a%=p; while(n){ if(n&1) r=r*a%p; a=a*a%p; n>>=1; } return r; }
为什么 r 要初始化成 1%p 而不是 1?
r
1%p
登录 后可看答案