Cod sursa(job #3256305)

Utilizator TeodorVTeodorV TeodorV Data 14 noiembrie 2024 08:41:23
Problema Suma divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");

const long long MOD=9901;

long long qpow(long long a, long long b)
{
    if(b==0)
        return 1;
    if(b==1)
        return a%MOD;
    if(b%2==0)
    {
        long long aux=qpow(a, b/2);
        return (aux*aux)%MOD;
    }
    else return (a*qpow(a, b-1))%MOD;
}

long long invMod(long long x)
{
    return qpow(x, MOD-2);
}

int main()
{
    long long x,n;
    fin>>x>>n;
    if(x==0)
    {
        fout<<0;
        return 0;
    }
    if(n==0)
    {
        fout<<1;
        return 0;
    }
    long long d,exp;
    long long sum=1;
    for(d=2; d*d<=x; d++)
    {
        if(x%d==0)
        {
            exp=0;
            while(x%d==0)
            {
                exp++;
                x/=d;
            }
            long long pdiv=qpow(d, (exp*n+1));
            sum*=((pdiv-1)%MOD)*invMod(d-1);
            sum%=MOD;
        }
    }
    if(x>1)
    {
        long long pdiv=qpow(x, (n+1));
        sum*=((pdiv-1)%MOD)*invMod(x-1);
        sum%=MOD;
    }
    fout<<sum;
    return 0;
}