Cod sursa(job #3319655)

Utilizator cezarica23cezar tambozi cezarica23 Data 2 noiembrie 2025 13:19:51
Problema Suma divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;

#define int long long
const int MOD = 9901;

int expmod(int a, int k)
{
    int p = 1;
    while (k > 0)
    {
        if (k % 2 == 1)
        {
            p *= a;
            p %= MOD;
        }
        a *= a;
        a %= MOD;
        k /= 2;
    }
    return p;
}

int inv_mod(int a)
{
    return expmod(a, MOD - 2);
}

int sumdiv(int n)
{
    int divv = 2, put = 0, allput = 1;
    while (n > 1)
    {
        divv %= MOD;
        while (n % divv == 0)
        {
            n /= divv;
            put ++;
        }
        put %= MOD;
        if (put > 0)
        {
            int x = (expmod(divv, put + 1) - 1) + MOD, y = inv_mod(divv - 1) + MOD;
            x %= MOD;
            y %= MOD;
            allput *= x * y;
            allput %= MOD;
        }
        divv ++;
        put = 0;
        if ((divv * divv) % MOD > n)
            divv = n;
    }
    return allput;
}

signed main() 
{
    ifstream cin("sumdiv.in");
    ofstream cout("sumdiv.out");
	int a, b; cin >> a >> b;
    int c = expmod(a, b) % MOD;
    cout << sumdiv(c);
}