博客
关于我
等比数列求和 (快速幂 + 逆元)
阅读量:394 次
发布时间:2019-03-05

本文共 1930 字,大约阅读时间需要 6 分钟。

要解决这个问题,我们需要计算两个自然数A和B的幂的所有自然数因子的和S,并对S取模9901。由于直接计算A^B可能会非常大,我们需要使用数学公式来高效计算。

方法思路

  • 质因数分解:首先对A进行质因数分解。例如,36的质因数分解是2^2 * 3^2。
  • 指数计算:将每个质因数的指数乘以B,得到A^B的质因数分解。例如,36^1的质因数分解是2^2 * 3^2。
  • 等比数列求和:对于每个质因数p,计算其在A^B中的指数e,然后使用等比数列求和公式计算其对应的和:(p^{e+1} - 1) / (p - 1)。
  • 快速幂和模运算:使用快速幂算法来计算大数的幂,并在每一步进行模运算,避免数值溢出。
  • 结果相乘:将所有质因数对应的等比数列和相乘,并对结果取模9901。
  • 解决代码

    #include 
    #include
    #include
    typedef long long ll;ll multi(ll a, ll b, ll m) { ll ans = 0; a %= m; while (b) { if (b & 1) { ans = (ans + a) % m; b--; } b >>= 1; a = (a + a) % m; } return ans;}ll quick_mod(ll a, ll b, ll mod) { ll res = 1; while (b) { if (b % 2 == 1) { res = multi(res, a, mod); } b >>= 1; a = multi(a, a, mod); } return res;}int main() { ll a, b; scanf("%I64d %I64d", &a, &b); if (a == 1) { printf("1\n"); return 0; } ll mod = 9901; ll result = 1; // 质因数分解函数 for (ll p = 2; p * p <= a; p += 2) { if (a % p == 0) { ll exponent = 0; while (a % p == 0) { exponent++; a /= p; } ll m = mod * (p - 1); ll numerator = quick_mod(p, exponent * b + 1, m); ll sum_p = (numerator + m - 1) / (p - 1) % mod; result = (result * sum_p) % mod; } } if (a > 1) { ll m = mod * (a - 1); ll exponent_plus_1 = b + 1; ll numerator = quick_mod(a, exponent_plus_1, m); ll sum_a = (numerator + m - 1) / (a - 1) % mod; result = (result * sum_a) % mod; } printf("%I64d\n", result); return 0;}

    代码解释

  • 质因数分解:使用试除法从小到大测试每个可能的质因数,直到分解完所有质因数。
  • 快速幂和模运算quick_mod函数使用二分法计算大数的幂,并在每一步进行模运算,避免数值溢出。
  • 等比数列求和:对于每个质因数p,计算其在A^B中的指数e,然后使用快速幂算法计算p的(e+1)次幂,使用等比数列求和公式计算和。
  • 结果相乘:将所有质因数对应的等比数列和相乘,并对结果取模9901,得到最终结果。
  • 通过这种方法,我们能够高效地计算大数的因数和,并对其取模,解决了问题中的计算难题。

    转载地址:http://edkzz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现page rank算法(附完整源码)
    查看>>
    Objective-C实现PageRank算法(附完整源码)
    查看>>
    Objective-C实现pancake sort煎饼排序算法(附完整源码)
    查看>>
    Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
    查看>>
    Objective-C实现PascalTriangle帕斯卡三角算法 (附完整源码)
    查看>>
    Objective-C实现password generator复杂密码生成器算法(附完整源码)
    查看>>
    Objective-C实现patience sort耐心排序算法(附完整源码)
    查看>>
    Objective-C实现PCA(附完整源码)
    查看>>
    Objective-C实现perceptron算法(附完整源码)
    查看>>
    Objective-C实现perfect cube完全立方数算法(附完整源码)
    查看>>
    Objective-C实现perfect number完全数算法(附完整源码)
    查看>>
    Objective-C实现perfect square完全平方数算法(附完整源码)
    查看>>
    Objective-C实现permutate Without Repetitions无重复排列算法(附完整源码)
    查看>>
    Objective-C实现pigeon sort鸽巢算法(附完整源码)
    查看>>
    Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
    查看>>
    Objective-C实现pollard rho大数分解算法(附完整源码)
    查看>>
    Objective-C实现Polynomials多项式算法 (附完整源码)
    查看>>
    Objective-C实现pooling functions池化函数算法(附完整源码)
    查看>>
    Objective-C实现porta密码算法(附完整源码)
    查看>>
    Objective-C实现Pow Logarithmic幂函数与对数函数算法 (附完整源码)
    查看>>