Pagini recente » Cod sursa (job #1038449) | Cod sursa (job #3273521) | Cod sursa (job #1919557) | Cod sursa (job #2164312) | Cod sursa (job #900166)
Cod sursa(job #900166)
#include <iostream>
#include <stdio.h>
#include <cmath>
#define MOD 9901
using namespace std;
FILE *f=fopen("sumdiv.in","r");
FILE *g=fopen("sumdiv.out","w");
bool prim[10001];
int v[10001],i,j,a,b,nr,pt[10001];
unsigned long long nr1,nr2,sum;
unsigned long long ridic(int a, int b)
{
unsigned long long cn,nr,m,i;
cn=a;
nr=1;
for(i=0;i<16;i++)
{
m=1<<i;
if((m&b)==m)
{
nr=(cn*nr)%MOD;
}
cn=(cn*cn)%MOD;
}
return nr;
}
void ciur()
{
int i,j;
for(i=2;i<=10000;i++)
if(!prim[i])
{
v[++v[0]]=i;
for(j=i*i;j<=10000;j+=i)
prim[j]=1;
}
}
int main()
{
fscanf(f,"%d",&a);
fscanf(f,"%d",&b);
i=1;
sum=1;
ciur();
while(sqrt(a)>=v[i])
{
while(a%v[i]==0){pt[i]++;a/=v[i];}
i++;
}
if(a>1)
{
nr1=(ridic(a,b+1)-1)%MOD;
nr2=(ridic(a-1,MOD-2)%MOD);
sum=((sum%MOD)*(nr1*nr2)%MOD)%MOD;
}
for(i=1;i<=v[0];i++)
{
if(pt[i])
{
nr1=(ridic(v[i],pt[i]*b+1)-1)%MOD;
nr2=(ridic(v[i]-1,MOD-2))%MOD;
sum=((sum%MOD)*(nr1*nr2)%MOD)%MOD;
}
}
fprintf(g,"%d",sum);
fclose(g);
return 0;
}