快速幂||取余运算
题目链接:https://www.luogu.com.cn/problem/P1226
题目描述
给你三个整数 b,p,k,求 b^p mod k。
输入格式
输入只有一行三个整数,分别代表 b,p,k
输出格式
输出一行一个字符串 b^p mod k=s,其中b,p,k 分别为题目给定的值, s 为运算结果。
输入输出样例
输入 #1
2 10 9
输出 #1
2^10 mod 9=7
说明/提示
样例输入输出 1 解释
2^10 = 1024,1024mod9=7。
数据规模与约定
对于 100% 的数据,保证 0≤b,p<2^31 , 1≤k<2^31。
解题思路:
快速幂模板
public static int ksm(long a, long b, int k) {
if (a == 0)
return 0;
int ans = 1;
if (b == 0)
return 1 % k;
while (b != 0) {
if ((b & 1) != 0) {
ans = (int) (ans * a % k); // 防止溢出
}
b >>= 1; // 去掉最低位
a = a * a % k;
}
return ans;
}
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long b = sc.nextLong();
long p = sc.nextLong();
int k = sc.nextInt();
System.out.println(b + "^" + p + " " + "mod" + " " + k + "=" + ksm(b, p, k));
}
public static int ksm(long b, long p, int k) {
if (b == 0)
return 0;
int ans = 1;
if (p == 0)
return 1 % k;
while (p != 0) {
if ((p & 1) != 0) {
ans = (int) (ans * b % k);
}
p >>= 1;
b = b * b % k;
}
return ans;
}
}