Cod sursa(job #640958)

Utilizator ELHoriaHoria Cretescu ELHoria Data 26 noiembrie 2011 20:57:49
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#define MOD 9901

using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");


int A , B , sd ;

int lgpow(int x,int y)
{
	int ans = 1;
	x%=MOD;
	for(;y;y>>=1)
	{
		if(y & 1) 
			ans = (ans*x)%MOD , y--;

		x = (x*x)%MOD;
	}
	return ans;
}

void solve()
{
	int p = 0;
	sd = 1;
	for(int d=2;d*d<=A;d++)
		if(A%d==0)
		{	
			while(A%d==0) A/=d , p++;
			p=p*B;
			if(A%MOD==1)
				sd = sd*((p+1)%MOD)%MOD;
			else
			sd= (sd*(lgpow(d,p+1)-1+MOD)%MOD*lgpow(d-1,MOD-2))%MOD;
			p = 0;
		}
	if(A>1)
	{
		p = B;
		if(A%MOD==1)
			sd = sd*((p+1)%MOD)%MOD;
		else
		sd= (sd*(lgpow(A,p+1)-1+MOD)%MOD*lgpow(A-1,MOD-2))%MOD;
	}
	if(!A) sd = 0;
}

int main()
{
	fin>>A>>B;

	solve();
	fout<<sd<<"\n";

	return 0;
}