Cod sursa(job #2236849)

Utilizator NOSCOPEPROKENDYMACHEAMACUMVREAU NOSCOPEPROKENDY Data 30 august 2018 19:29:25
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#define MOD 9901
using namespace std;
ifstream fi("sumdiv.in");
ofstream fo("sumdiv.out");
int a,b,ca,i,E[105],D[105],nrd,rez;

int p(int a, int b)
{
    int rez=1;
    int i;
    for(i=0; (1<<i)<=b; i++)
    {
        if((1<<i)&b)
            rez=(rez*a)%MOD;
        a=(a*a)%MOD;
    }
    return rez;
}

int prog(int q, int n)
{
    if(q==1)
        return (n%MOD);
    int t1=p(q,n);
    t1=(t1-1+MOD)%MOD;
    int t2=(q-1+MOD)%MOD;
    t1=(t1*p(t2,MOD-2))%MOD;
    return t1;
}

int main()
{
    fi>>a>>b;
    ca=a;
    for(i=2; i*i<=a; i++)
    {
        if(ca<=1)
            break;
        if(ca%i==0)
        {
            D[++nrd]=i;
            while(ca>1 && ca%i==0)
            {
                E[nrd]++;
                ca/=i;
            }
        }
    }
    if(ca!=1)
    {
        D[++nrd]=ca;
        E[nrd]=1;
    }
    rez=1;
    for(i=1; i<=nrd; i++)
        rez=(rez*prog(D[i]%MOD,E[i]*b+1))%MOD;
    fo<<rez<<"\n";
    fi.close();
    fo.close();
    return 0;
}