a^b
题目来源:《算法竞赛进阶指南》
时间限制: 1000 m s 1000ms 1000ms 内存限制: 32 m b 32mb 32mb
题目描述
求 a a a 的 b b b 次方对 p p p 取模的值。
输入格式
三个整数 a a a , b b b , p p p ,在同一行用空格隔开。
输出格式
输出一个整数,表示 a^b mod p
的值。
数据范围
0 ≤ a , b , p ≤ 1 0 9 0 ≤ a,b,p ≤ 10^9 0≤a,b,p≤109 ,
数据保证 p ≠ 0 p≠0 p=0
样例输入
3 2 7
样例输出
2
解题思路
这是一个快速幂模板题,直接套模板就可以了。
快速幂模板( a b % p a^b\%p ab%p):
public static long quickPow(int a, int b, int mod) {
long ans = 1, clothCover = a;
while (b > 0) {
if ((b & 1) == 1) {
ans = ans * clothCover % mod;
}
clothCover = clothCover * clothCover % mod;
b >>= 1;
}
return ans % mod;
}
解题代码-Java
import java.util.Scanner;
public class Main {
public static long quickPow(int a, int b, int mod) {
long ans = 1, clothCover = a;
while (b > 0) {
if ((b & 1) == 1) {
ans = ans * clothCover % mod;
}
clothCover = clothCover * clothCover % mod;
b >>= 1;
}
return ans % mod;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println(quickPow(input.nextInt(), input.nextInt(), input.nextInt()));
input.close();
}
}