模数指数与指数的二进制表示

时间:2016-07-05 19:54:29

标签: c++ modular exponentiation

好的,所以我有一个用于计算整数的二进制表示的赋值,然后将其反转为从右到左的表示法,并将其放入向量中并对其执行模幂运算。我有二进制表示,但是当它归结为模幂运算部分时,我得到了错误的答案。这可能是我在代码中遗漏的一些蠢事,但我看了一些例子,似乎无法弄清问题是什么。以下是模幂运算的代码。

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)。初始化2个变量b和A然后检查第一个索引以查看K是偶数还是奇数,然后进入我的循环总结所有内容。仍然无法弄明白。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

好的,我确实弄明白了。因为我正在使用

,所以我没有在向量中循环
i < K.size() - 1

当我应该使用

i < K.size()

i <= K.size() - 1

在我的for循环中。