模运算法则
(A+B) mod b=(A mod b+B mod b) mod b
(A×B) mod b = ((A mod b) × (B mod b)) mod b
快速幂模板
public int quickPower(int a, int b)//是求a的b次方
{
int ans = 1, base = a;
int pow = b;
while(pow > 0)
{
if(pow & 1) //判断最低位是不是1
ans *= base;
base *= base;
pow >>= 1;
}
return ans;
}
递归+分治求解上面一题
import java.util.Scanner;
class Main{
static int a,b,p;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
a = cin.nextInt();
b = cin.nextInt();
p = cin.nextInt();
System.out.println(a+"^"+b+" mod "+p+"="+fun(a,b,p));
}
public static long fun(int a,int b,int p){
if(b==1)
return a%p;
if(b%2==0) {
long temp = fun(a,b/2,p);
return (temp*temp)%p;
}
else
return (fun(a,b-1,p)*fun(a,1,p))%p;
}
}
快速幂求解
import java.util.Scanner;
class Main{
static int a,b,p;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
a = cin.nextInt();
b = cin.nextInt();
p = cin.nextInt();
long res = 1;
long base = a;
int pow = b;
while(pow>0){
if((pow&1)==1){
res*=base;
res%=p;
}
base*=base;
base%=p;
pow>>=1;
}
System.out.println(a+"^"+b+" mod "+p+"="+res);
}
}