Cod sursa(job #2156024)

Utilizator IsacLucianIsac Lucian IsacLucian Data 8 martie 2018 13:21:23
Problema Suma divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
#define MOD 9901

using namespace std;

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

int p,e;

int Lgput(int a,int n)
{
    int p=1;
    while(n)
    {
        if(n%2)p=1LL*p*a%MOD;
        a=1LL*a*a%MOD;
        n/=2;
    }
    return p;
}

void Solutie()
{
    int sum,div,nrd;

    sum=0;div=2;nrd=0;
    while(p%div==0)
    {
        nrd++;
        p/=div;
    }

    sum=((sum+1LL*(Lgput(div,(1LL*nrd*e)%MOD+1)-1+MOD))%MOD*Lgput(div-1,MOD-2)%MOD)%MOD;

    div++;
    while(p>1 && div*div<=p)
    {
        nrd=0;
        while(p%div==0)
        {
            nrd++;
            p/=div;
        }

        sum=(sum+1LL*(Lgput(div,(1LL*e*nrd)%MOD+1)-1+MOD)%MOD*Lgput(div-1,MOD-2)%MOD)%MOD;
        div+=2;
    }


    if(p>1)sum=(sum+1LL*(Lgput(p,2*e)-1)%MOD*Lgput(p-1,MOD-2)%MOD)%MOD;

    fout<<sum<<"\n";
}

int main()
{
    fin>>p>>e;
    Solutie();
    return 0;
}