Pagini recente » Cod sursa (job #2032980) | Cod sursa (job #1292538) | Cod sursa (job #1736021) | Cod sursa (job #1392076) | Cod sursa (job #918325)
Cod sursa(job #918325)
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <bitset>
#define M 9901
using namespace std;
FILE *f=fopen("sumdiv.in","r");
FILE *g=fopen("sumdiv.out","w");
int v[10050],i,j,a,b,nr,put[10050];
bitset<10006>prim;
unsigned long long sum,prod,prod2;
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;
}
}
unsigned long long ridic(unsigned long long n, unsigned long long p)
{
int m,i,nr=1,cn=n;
for(i=0;(1<<i)<=p;i++)
{
if((1<<i)&p)nr=(nr*cn)%M;
cn=(cn*cn)%M;
}
return nr;
}
int main()
{
fscanf(f,"%d%d",&a,&b);
b%=(M-1);
sum=1;
ciur();
i=1;
while(sqrt(a)>=v[i])
{
while(a%v[i]==0){put[i]++;a/=v[i];}
i++;
}
if(a>1)
{
prod=(ridic(a,b+1)-1)%M;
prod2=(ridic(a-1,M-2)%M);
sum=((sum%M)*(prod* prod2)%M)%M;
}
for(i=1;i<=v[0];i++)
{
if(put[i])
{
prod=(ridic(v[i],put[i]*b+1)-1)%M;
prod2=(ridic(v[i]-1,M-2))%M;
sum=((sum%M)*(prod*prod2)%M)%M;
}
}
if(a==0)sum=0;
fprintf(g,"%d",sum);
fclose(g);
return 0;
}