Cod sursa(job #712682)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 13 martie 2012 18:30:56
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <fstream>

using namespace std;

const int m=9901;
int a,b,sol=1;

void read ()
{
	ifstream in ("sumdiv.in");
	in>>a>>b;
}

inline int lgp (int x,int y)
{
	int r=1;
	x%=m;
	for(;y;y>>=1)
	{
		if(y&1)
			r=(r*x)%m;
		x=(x*x)%m;
	}
	return r;
}

inline int sm (int a,int b)
{
	if(b==1)
		return a%m;
	if(b&1)
		return (sm(a,b-1)+lgp(a,b))%m;
	return ((lgp(a,b>>1)+1)*sm(a,b>>1))%m;
}

void solve ()
{
	if(b==0)
		return;
	for(int c,i=2;i*i<=a;++i)
		if(!(a%i))
		{
			for(c=0;!(a%i);++c)
				a/=i;
			sol=(sol*(sm(i,c*b)+1)%m)%m;
		}
	if(a>1)
		sol=(sol*(sm(a,b)+1)%m)%m;
}

void out ()
{
	freopen ("sumdiv.out","w",stdout);
	printf("%d",sol);
}

int main ()
{
	read ();
	solve ();
	out ();
	return 0;
}