Cod sursa(job #1936176)

Utilizator pimao2004Lupu Stefan Dragos pimao2004 Data 22 martie 2017 21:43:31
Problema Suma divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

using namespace std;
ifstream in ("sumdiv.in");
ofstream out ("sumdiv.out");
long long d[5000001],p[5000001];
long long sum=1;
long long lgputmoka(long long n,long long p)
{
    long long a,i,sol=1;
    a=n;
    for(i=0;(1<<i)<=p;i++)
    {
        if((p&(1<<i))>0)
            sol=(sol*a)%9901;
        a=(a*a)%9901;
    }
    return sol;
}
int main()
{
    int a,b,pu=0;
    in>>a>>b;
    int i,j=0;
    for(i=2;i*i<=a;i++)
    {
        pu=0;
        while(a%i==0)
        {
         a/=i;
         pu++;
        }
        if(pu)
        {
            j++;
         d[j]=i;
         p[j]=1LL*pu*b;
        }
    }
    if(a>1)
    {
        j++;
     d[j]=a;
     p[j]=b;
    }
    for(i=1;i<=j;i++)
    {
        sum=(sum*((lgputmoka(d[i],p[i]+1)-1)/(d[i]-1)))%9901;
    }
    out<<sum;
    return 0;
}