Cod sursa(job #3234693)

Utilizator unomMirel Costel unom Data 11 iunie 2024 10:39:25
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;

#define int long long

ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
int a, b, ans;
int MOD = 9901;

int lgput(int x, int e)
{
    int ans = 1;

    while(e != 0)
    {
        if(e % 2 == 1)
        {
            ans = (ans * x) % MOD;
        }

        x = (x * x) % MOD;
        e /= 2;
    }

    return ans;
}

int sum(int x, int e)
{
    int ans = (lgput(x, e + 1) + MOD - 1) % MOD;
    ans = (ans * lgput(x - 1, MOD - 2)) % MOD;

    return ans;
}

signed main()
{
    in>>a>>b;

    ans = 1;
    for(int i = 2; i*i<=a; i++)
    {
        if(a % i == 0)
        {
            int p = 0;

            while(a % i == 0)
            {
                p++;
                a /= i;
            }

            ans = (ans * sum(i, b * p)) % MOD;
        }
    }
    if(a > 1)
    {
        ans = (ans * sum(a, b)) % MOD;
    }

    out<<ans;

    return 0;
}