c – 以2为模数计算大功率的最快方法是什么?

前端之家收集整理的这篇文章主要介绍了c – 以2为模数计算大功率的最快方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于1< = N< = 1000000000,我需要计算2N mod 1000000007,它必须非常快!
我目前的做法是:
ull power_of_2_mod(ull n) {
    ull result = 1;
    if (n <= 63) {
        result <<= n;
        result = result % 1000000007;
    }
    else {
        ull one = 1;
        one <<= 63;
        while (n > 63) {
            result = ((result % 1000000007) * (one % 1000000007)) % 1000000007;
            n -= 63;
        }

        for (int i = 1; i <= n; ++i) {
            result = (result * 2) % 1000000007;
        }

    }

    return result;
}

但它似乎不够快.任何的想法?

解决方法

猜你在找的C&C++相关文章