Cod sursa(job #523435)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 18 ianuarie 2011 00:14:13
Problema Suma divizorilor Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");

const int M=9901;
int i,A,B,S=1;

void euclid(int a, int b, int &x, int &y)
{
	if(b==0)
	{
		x=1;
		y=0;
	}
	else
	{
		int x0,y0;
		euclid(b,a%b,x0,y0);
		x=y0;
		y=x0-(a/b)*y0;
	}
}

int put(int c, int p)
{
	int R=1;
	while(p>0)
	{
		if(p&1) R=R*c % M;
		c=c*c % M;
		p>>=1;
	}
	return R;
}

void rez()
{
	int p,x,y;
	for(i=2;i<=A;i++)
	{
		if(A%i>0) continue;
		p=0;
		while(A%i==0)
		{
			A/=i;
			p++;
		}
		int p1,p2;
		p1= ( put(i,p*B+1) - 1) % M;
		euclid(i-1,M,x,y);
		x=x % M;
		while(x<0) x+=M;
		p2=x;
		S*=(p1 * p2) % M;
		S=S % M;
	}
}


int main()
{
	fin >> A >> B;
	rez();
	if(A==0) fout << "0";
	else fout << S;
}