洛谷链接:https://www.luogu.com.cn/problem/P1226
取余运算
快速幂经常要结合取余运算。这里也讲一点。
取余运算有一些好用的性质,包括:
(A+B) \mod b = (A \mod b + B \mod b) \mod b(A+B)modb=(Amodb+Bmodb)modb
(A×B) \mod b = ((A \mod b) × (B \mod b)) \mod b(A×B)modb=((Amodb)×(Bmodb))modb
import java.util.Scanner;
public class Main {
public static long quickPower(long a, long b,long c){//是求a的b次方 余c
long ans = 1, base = a; //ans为答案,base为a^(2^n)
while(b > 0)
{
if(b%2==1)
{
ans *= base;
ans %= c;
}
base *= base;
base %= c;
b >>= 1;
}
return ans;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
long a=in.nextInt();
long b=in.nextInt();
long c=in.nextInt();
System.out.println(a+"^"+b+" mod "+c+"="+quickPower(a,b,c)%c); //最后还要取余一次
}
}
【注意事项】
1、每进行一步运算时都要把得到的答案对p取模,否则会只有 28分。
2、b m p ans 都要定义成 long long 型变量,不然会只有 42分。
3、不要认为运算过程中对答案取模就够了,再输出答案的时候不要忘记把最终的答案再对p取一次模,否则就会只有 84分。
4、结合以上几点注意事项的快速幂程序就可以得到 100分了。