Cod sursa(job #1387807)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 14 martie 2015 18:15:08
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include<fstream>
#include<math.h>
#define nmax 8002
using namespace std;
int ciur[nmax];
long long a,b,db,diviz,s,j,y,i,p,aa;
int main ()
{
    ifstream fin("sumdiv.in");
    ofstream fout("sumdiv.out");
    ciur[1]=1;
    fin>>a>>b;
    if(a>1)
    {
        y=sqrt(a)+1;
        s=1;
        for(i=2;i<=y;i++)
        {
            if(ciur[i]==0)
            {
                for(j=i*i;j<=y;j=j+i)
                {
                    ciur[j]=1;
                }
                diviz=0;
                while(a%i==0)
                {
                    diviz=diviz+1;
                    a=a/i;
                }
                if(diviz!=0)
                {
                    diviz=diviz*b+1;
                    db=1;
                    p=i;
                    while(diviz!=0)
                    {
                        if(diviz%2==1)
                        {
                            db=(db*p)%9901;
                        }
                        p=(p*p)%9901;
                        diviz=diviz/2;
                    }
                    p=1;
                    while(p*(i-1)%9901!=1)
                    {
                        p++;
                    }
                    s=s*(db-1);
                    s=s%9901;
                    s=s*p;
                    s=s%9901;
                }
                if(a==1)
                {
                    break;
                }
            }
        }
        if(a!=1)
        {
            j=1;
            aa=a%9901;
            b++;
            while(b!=0)
            {
                if(b%2==1)
                {
                    j=(j*aa)%9901;
                }
                aa=(aa*aa)%9901;
                b=b/2;
            }
            p=1;
            while(p*(a-1)%9901!=1)
            {
                p++;
            }
            s=s*(j-1);
            s=s%9901;
            s=s*p;
            s=s%9901;
        }
        fout<<s;
    }
    else
    {
        fout<<a;
    }
    fin.close();
    fout.close();
    return 0;
}