Cod sursa(job #194202)

Utilizator raduzerRadu Zernoveanu raduzer Data 8 iunie 2008 21:00:44
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>

long long n,x,y,i,j,a[1000],b[1000];
long long s,s2,z;

long long log(long long x, long long y)
{
	long long t=1;   
	for (int k=y; k>0; k/=2)   
	{   
		if (k%2==1) t=(t*x)%9901;   
		x=(x*x)%9901;   
	}   
	return t;
}

int main()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%lld%lld",&x,&y);
	for (i=2; i*i<=x; ++i)
	{
		if (x%i) continue;
		a[++n]=i;
		while (x%i==0) { x/=i; ++b[n]; }
	}
	if (x>1) { a[++n]=x; b[n]=1; }
	s=1;
	for (i=1; i<=n; ++i)
	{
		b[i]*=y; 
		z=(log(a[i],b[i])*a[i]+9900)%9901;
		z=(z*log(a[i]-1,9901-2))%9901;
		s=(s*z)%9901;
	}
	printf("%lld\n",s);
	return 0;
}