用指数的二进制表示的模幂

Modular Exponentiation with binary representation of exponent

本文关键字:表示 二进制 指数      更新时间:2023-10-16

好的,我有一个赋值来计算一个整数的二进制表示,然后把它转换成从右到左的符号,把它变成一个向量,然后对它执行模幂。我把二进制表示下来了,但是当它变成模幂部分时,我得到了错误的答案。这可能是我在代码中遗漏的一些愚蠢的东西,但我看过示例,似乎无法找出问题可能是什么。这里是模求幂的代码。

int ModularExpo(int a, vector<int> K, int n) {
    if (n == 1) {
        return 0;
    }
    int b = 1;
    int A = a;
    if (K[0] == 1) {
        b = a;
    }
    for (unsigned int i = 1; i < K.size() - 1; i++) {
        A = A * A % n;
        if (K[i] == 1) {
            b = A * b % n;
        }
    }
    return b;
}

所以基本上我输入了底数(a),指数以二进制形式作为向量的反转(K)和模(n)。初始化两个变量b和a,然后检查第一个索引,看看K是偶数还是奇数,然后进入我的循环求和所有的东西。还是想不明白。

好了,我算出来了。我没有循环遍历向量因为我用的是

i < K.size() - 1

当我应该使用

i < K.size()

i <= K.size() - 1