为什么要 long long

P1593 因子和

lzy20091001 @ 2024-05-09 23:34:50

加上 #define int long long 就过了,请问哪里需要开 long long

#include <iostream>

const int MOD = 9901;

int p[15], cnt[15], ind[15];

int qpow(int a, int b) // 快速幂
{
    int res = 1;
    while (b > 0)
    {
        if (b & 1)
            res = res * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return res;
}

int inv(int x) { return qpow(x, MOD - 2); } // 逆元

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    int a, b, ans = 1;

    std::cin >> a >> b;

    // 分解质因数
    for (int i = 2; i * i <= a; i++)
    {
        if (a % i == 0)
            p[++p[0]] = i;
        while (a % i == 0)
        {
            a /= i;
            cnt[p[0]] += b;
        }
    }
    if (a != 1)
    {
        p[++p[0]] = a;
        cnt[p[0]] = b;
    }

    // 求解答案
    for (int i = 1; i <= p[0]; i++)
    {
        int res = 0;
        if (p[i] % MOD == 1)
            res = (cnt[i] + 1) % MOD;
        else
            res = (qpow(p[i], cnt[i] + 1) - 1) * inv(p[i] - 1) % MOD;
        ans = ans * res % MOD;
    }

    std::cout << (ans + MOD) % MOD << "\n";

    return 0;
}

by lunjiahao @ 2024-05-10 07:09:16

@lzy20091001

快速幂爆 int

可以在 while 前面加一个 a%=MOD


by fjy666 @ 2024-05-10 09:00:05

@critnos 求逆会爆


by Rosaya @ 2024-05-10 09:03:17

@critnos 我的锅,这个模数很小。


|