Cod sursa(job #415695)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 11 martie 2010 18:57:20
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
# include <fstream.h>
# include <math.h>
ifstream f ("sumdiv.in");
ofstream g ("sumdiv.out");
long long int a[1000000],b[1000000],x,y,q,k,n,i,s,mod=9901;

    int asd (long long int a,long long int b)
	{
		if (b==1)
			return a%mod;
		if (b%2==0)
			return asd(a,b/2)%mod * asd(a,b/2)%mod;
		else
			return (asd (a,b-1)*a)%mod;
	}




int main ()
{
	f>>x>>y;
	
	
	for (i=2;i<=sqrt (x);i++)
	{
		q=0;
		while (x%i==0)
			{
				q++;
				x=x/i;
		}
		if (q)
		{
			n++;
			a[n]=i;
			b[n]=q;
		}
	}
	if (x>1)
	{
		n++;
		a[n]=x;
		b[n]=1;
	}
	for (i=1;i<=n;i++)
		b[i]=b[i]*y;
	s=1;
	for (i=1;i<=n;i++)
	{
		x=(asd (a[i],b[i]+1)-1);
		if (x<0)
			x=x+mod;
		y=a[i]-1;
		while (x%y!=0)
			x=x+mod;
		x=x/y;
		x=x%mod;
		
		
		
		s=s*x;
		s=s%mod;
	}
	g<<s;
	
	
	return 0;
}