目标
输入 整数 x,y,n;x>0,y>=0,n>1;
输出 x^y(mod n)。
用到的模运算的定理
- (x*y)(mod n) = [x(mod n)*(y(mod n))](mod n)
- a+b(mod n) = b+a(mod n)
- a*b(mod n) = b*a(mod n)
- a+(b+c)(mod n) = (a+b)+c(mod n)
- a*(b*c)(mod n) = (a*b)*c(mod n)
要考虑到的点
算法过程描述
java实现
package xymodn;
import java.util.Scanner;
public class Modn {
//Java实现对指数取模
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
int x = cin.nextInt();
int y = cin.nextInt();
int n = cin.nextInt();
int result = modExp(x,y,n);
System.out.println("x^y(mod n)="+result);
}
cin.close();
}
private static int modExp(int x,int y,int n) {
if(y==0) {
return 1;
}else {
if(y%2==0) {
return modExp((x*x)%n,y/2,n); //用到了模运算的性质3
}else {
return x*modExp((x*x)%n,y/2,n)%n; //用到了乘法模运算的交换律
}
}
}
}
测试
2 21 23
x^y(mod n)=12