Cod sursa(job #547124)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 5 martie 2011 21:39:31
Problema Suma divizorilor Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
#define MOD 9901

using namespace std;

ifstream f("sumdiv.in");
ofstream g("sumdiv.out");

int a, b, aa, aux;
long long rez=1;

void Citeste()
{
	f>>aa>>b;
	aux=aa;
}

long long putere(int b)
{
	long long z;
	if (b==0) return 1;
	if (b==1) return a;
	if (b%2==0)
	{
		z=putere(b/2);
		return (z*z)%MOD;
	}
	else 
	{
		z=putere(b/2);
		return ((z*z*a)%MOD);
	}
}

long long suma(int b)
{
	long long z, p;
	if (b==0) return 1;
	if (b%2==1) 
	{
		p=putere((b+1)/2);
		z=suma(b/2);
		return ((z*(p+1))%MOD);
	}
	else 
	{
		p=putere(b);
		z=suma(b-1);
		return ((z+p)%MOD);
	}
}

void Solve()
{
	int d=2;
	long long t;
	if (aa%2==0) a=d, t=suma(b); 
	while (aa%2==0)
	{
		rez=(rez*t)%MOD;
		aa/=2;
	}
	d=3;
	while (d*d<=aux)
	{
		if (aa%d==0) a=d%MOD, t=suma(b);
		while (aa%d==0)
		{
			rez=(rez*t)%MOD;
			aa/=d;
		}
		d+=2;
	}
	if (aa>1) a=aa%MOD, rez=(rez*suma(b))%MOD;
}

void Afiseaza()
{
	g<<rez<<"\n";
}

int main()
{
	Citeste();
	
	Solve();
	
	Afiseaza();
	
	f.close();
	g.close();
	return 0;
}