Cod sursa(job #659478)

Utilizator alin.18Chedea Alin alin.18 Data 10 ianuarie 2012 17:52:50
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define MOD 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int A , B , sd ;

int lgpow(int x,int y)

{

int ans = 1;

x%=MOD;
for(;y;y>>=1)

{

if(y & 1)

ans = (ans*x)%MOD , y--;

x = (x*x)%MOD;

}

return ans;

}

void solve()

{
int p = 0;

sd = 1;

for(int d=2;d*d<=A;d++)

if(A%d==0)

{  

while(A%d==0) A/=d , p++;

p=p*B;

if(A%MOD==1)

sd = sd*((p+1)%MOD)%MOD;

else

sd= (sd*(lgpow(d,p+1)-1+MOD)%MOD*lgpow(d-1,MOD-2))%MOD;

p = 0;

}

if(A>1)

{

p = B;

if(A%MOD==1)

sd = sd*((p+1)%MOD)%MOD;

else

sd= (sd*(lgpow(A,p+1)-1+MOD)%MOD*lgpow(A-1,MOD-2))%MOD;

}

if(!A) sd = 0;

}
int main()
{
fin>>A>>B;

solve();
fout<<sd<<"\n";
 
return 0;

}