Cod sursa(job #698202)

Utilizator cipry13Hotea Ciprian cipry13 Data 29 februarie 2012 12:54:33
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");

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

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

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


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