编程求x^y 最后三位数表示的整数 快速幂算法

输入不超过最大整数的两个数x、y

输入 x^y 的最后三位数

输入  2 3 

输出 8

计算x 的 y 次方的方法,y 个 x 相乘 需要做 y - 1 次乘法运算。在数据量变大的时候,很可能会超时。

此处我们引入  快速幂算法 来实现;快速幂就是快速得计算一个数值的多少次幂,其时间复杂度为 O(logN), 与朴素的O(N)相比效率有了极大的提高,基本原理是二进制。

任何一个整数都可以用 二进制来表示 即 1100 1101 这种形式,我们不妨也将 次方用二进制来表示,即将y来用二进制表示,例如    130 表示为  10000010 这样  5^130 可以表示为  

以这种方式,我们可以大幅简化运算

代码实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        int result = calculateLastThreeDigitsOfPower(x, y);
        System.out.println(result);
    }

    public static int calculateLastThreeDigitsOfPower(int x, int y) {
        int result = 1;
        x = x % 1000; // 只保留x的最后三位数,尾数不会发生变化
        // 使用快速幂算法
        while (y > 0) {
            if (y % 2 == 1) {
                result = (result * x) % 1000;
                 // 判断此处 y转换为 二进制的值
            }
            x = (x * x) % 1000;
            y /= 2;
            // 进入下一位
        }

        return result;
    }
}

通过取余 和 快速幂算法的结合,来进行幂的快速运算

你可能感兴趣的:(算法)