Cod sursa(job #950464)

Utilizator robert_stefanRobert Stefan robert_stefan Data 16 mai 2013 22:01:30
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#define IN "sumdiv.in"
#define OUT "sumdiv.out"
#define MODULO 9901

using namespace std;

ifstream in(IN);
ofstream out(OUT);

int A, B;
long long sDiv=1, p1, p2;

int pow(int n, int p)
{
	int sol=1;
	while(p)
	{
		if(p%2==1)
			sol = (1LL* sol * n ) % MODULO;
		n = (1LL* n * n ) % MODULO;
		p/=2;
	}
	return sol;
}

int main()
{
	in>>A>>B;
	for(int i=2; i*i <= A; i++)
	{
		if(A%i)
			continue;
		int p=0;
		while(A%i==0)
			p++,
			A/=i;
		p*=B;
		if(i%MODULO==1)
			sDiv =(sDiv*(p+1))%MODULO;
		else
		{
			p1=(pow(i,p+1)-1+MODULO)%MODULO;
			p2=pow(i-1,MODULO-2)%MODULO;
			sDiv = ( ( ( sDiv * p1 ) % MODULO ) * p2 ) % MODULO;
		}
	}
	if(A>1)
		if(A%MODULO==1)
			sDiv=(sDiv*(B+1))%MODULO;
		else
			sDiv=(sDiv*(pow(A,B+1)-1+MODULO)%MODULO*pow(A-1,MODULO-2))%MODULO;
	out<<sDiv<<'\n';
	in.close();
	out.close();
	return 0;
}