Cod sursa(job #1387712)

Utilizator alexburdescuBurdescu Alexandru alexburdescu Data 14 martie 2015 16:44:50
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#include<math.h>
#define nmax 8002
using namespace std;
int ciur[nmax],diviz[nmax],i;
long long a,b,db[nmax],s,j,y;
int main ()
{
    ifstream fin("sumdiv.in");
    ofstream fout("sumdiv.out");
    ciur[1]=1;
    fin>>a>>b;
    y=sqrt(a)+1;
    for(i=2;i*i<=y;i++)
    {
        if(ciur[i]==0)
        {
            for(j=i*i;j<=y;j=j+i)
            {
                ciur[j]=1;
            }
        }
    }
    for(i=2;i<=y;i++)
    {
        if(ciur[i]==0)
        {
            while(a%i==0)
            {
                diviz[i]=diviz[i]+1;
                a=a/i;
            }
        }
    }
    s=1;
    for(i=2;i<=y;i++)
    {
        if(diviz[i]!=0)
        {
            diviz[i]=diviz[i]*b;
            db[i]=1;
            while(diviz[i]+1!=0)
            {
                db[i]=db[i]*i;
                diviz[i]=diviz[i]-1;
            }
            s=s*(db[i]-1)/(i-1);
            s=s%9901;
        }
    }
    if(a!=1)
    {
        j=1;
        while(b+1!=0)
        {
            j=(j*a)%9901;
            b--;
        }
        s=s*(j-1)/(a-1);
        s=s%9901;
    }
    fout<<s;
    fin.close();
    fout.close();
    return 0;
}