Cod sursa(job #547004)

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

using namespace std;

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

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

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

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 p, z;
	if (b==1) return 1;
	if (b%2==0)
	{
		p=putere(b/2); 
		z=suma(b/2);
		return (((z*p)%MOD)+z)%MOD;
	}
	else 
	{
		p=putere(b-1);
		z=suma(b-1);
		return (z+p)%MOD;
	}
}

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

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

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