Cod sursa(job #2925737)

Utilizator _andrei4567Stan Andrei _andrei4567 Data 15 octombrie 2022 22:49:21
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#define int long long

using namespace std;

ifstream cin ("sumdiv.in");
ofstream cout ("sumdiv.out");

using dragnea = pair <int, int>;

const int MOD = 9901;

vector <dragnea> v;

int a, b, sol = 1;

void desc ()
{
    int d = 2;
    while (d * d <= a)
    {
        if (!(a % d))
        {
            int e = 0;
            while (!(a % d)) a /= d, ++e;
            v.push_back({d, e * b});
        }
        ++d;
    }
    if (a > 1)
        v.push_back({a, b});
}

int llpow (int a, int b)
{
    int res = 1;
    a = a % MOD;
    while (b)
    {
        if (b & 1)res = res * a % MOD;
        b >>= 1;
        a = a * a % MOD;
    }
    return res;
}

int invers (int x)
{
    return llpow (x, MOD - 2);
}

signed main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> a >> b;
    desc ();
    for (auto it : v)
    {
        int part = (llpow(it.first, it.second + 1) - 1 + MOD) % MOD;
        int inv = invers(it.first - 1);
        sol = ((sol * part % MOD) * inv) % MOD;
    }
    cout << sol << '\n';
    return 0;
}