P1226 【模板】快速幂||取余运算(Java)

快速幂||取余运算

题目链接: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;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45894701/article/details/115310935
今日推荐