Cod sursa(job #194092)

Utilizator raduzerRadu Zernoveanu raduzer Data 8 iunie 2008 13:03:11
Problema Suma divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <stdio.h>

int n,x,y,i,j,a[10000],b[10000];
long long s,s2;

long long proc(int q,int k)
{
	if (k==0) return 1;
	if (k==1) return a[q];
	if (k%2)
	{
		long long r=proc(q,k-1)%9901;
		return (a[q]*r)%9901;
	}
	long long r=proc(q,k/2);
	return (r*r)%9901;
}

int main()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%d%d",&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;
		s=s*(((proc(i,b[i])*a[i]-1)%9901)/(a[i]-1))%9901;
	}
	printf("%lld",s);
	return 0;

}