【问题标题】:Modular Exponentiation with binary representation of exponent具有指数二进制表示的模幂运算
【发布时间】:2016-11-07 18:37:28
【问题描述】:

好的,所以我有一个任务来计算整数的二进制表示,然后将其反转为从右到左的表示法,并将其放入向量中并对其执行模幂运算。我有二进制表示,但是当涉及到模幂部分时,我得到了错误的答案。这可能是我在代码中遗漏的一些愚蠢的东西,但我查看了示例,似乎无法弄清楚问题可能是什么。这是模幂运算的代码。

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 是偶数还是奇数,然后进入我的循环总结所有内容。还是想不通。

感谢任何帮助,谢谢。

【问题讨论】:

    标签: c++ modular exponentiation


    【解决方案1】:

    好吧,我确实想通了。我没有一直循环遍历向量,因为我正在使用

    i < K.size() - 1
    

    当我应该使用任何一个时

    i < K.size()
    

    i <= K.size() - 1
    

    在我的 for 循环中。

    【讨论】:

    • 使用 i &lt; K.size() 减少幕后数学,假设编译器无法识别 -1&lt;= 并将其剥离回 i &lt; K.size()
    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2017-04-03
    • 2020-05-14
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多