Cod sursa(job #3256297)

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

using namespace std;

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

const int MOD=9901;

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

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

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