Cod sursa(job #1387807)
Utilizator | 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;
}