Pagini recente » Cod sursa (job #2832348) | Cod sursa (job #1535094) | Cod sursa (job #1646775) | Cod sursa (job #3142598) | Cod sursa (job #649163)
Cod sursa(job #649163)
#include<cstdio>
#define M 9901
#define lul unsigned long long
lul v[50],u[50],y,x,i,a,b,j,k,m,t,z,p=1,r,h;
int main()
{FILE *f=fopen("sumdiv.in","r"),*g=fopen("sumdiv.out","w");
fscanf(f,"%llu%llu",&a,&b);
if(a%M==0||!b||a==1)
{fprintf(g,"1");
return 0;}
for(i=2;i*i<=a;i++)
{j=0;
while(a%i==0&&a)
j++,a/=i;
if(j)
v[++k]=i,u[k]=j;}
if(a>1)
v[++k]=a,u[k]=1;
for(i=1;i<=k;i++)
{m=b*u[i]+1,y=1,x=v[i]%M;
while(m)
{if(m%2)
y=(y*x)%M;
m/=2;
x=(x*x)%M;}
t=M-2,r=(v[i]-1)%M,z=1;
if(y<0)
y=M-y;
if(y)
y--;
else
y=M-1;
while(t)
{if(t%2)
z=(z*r)%M;
t/=2;
r=(r*r)%M;}
if(z<0)
z=M-z;
if(!y)
y=(b*u[i]+1)%M;
if(!z)
z=M-1,h=1;
p=(p*y*z)%M;}
if(h)
fprintf(g,"%llu",M-p);
else
fprintf(g,"%llu",p);
return 0;}