Cod sursa(job #950454)

Utilizator robert_stefanRobert Stefan robert_stefan Data 16 mai 2013 21:14:50
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 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, sDiv=1, p1, p2;

int pow(int n, int p)
{
	int sol=1;
	while(p)
	{
		if(p%2==1)
			sol = ( sol * n ) % MODULO;
		n = ( 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;
		p1=(pow(i,p+1)-1)%MODULO;
		p2=pow(i-1,MODULO-2)%MODULO;
		sDiv = ( ( ( sDiv * p1 ) % MODULO ) * p2 ) % MODULO;
	}
	if(A>1)
		sDiv=(sDiv*(pow(A,B+1)-1+MODULO)%MODULO*pow(A-1,MODULO-2))%MODULO;
	out<<sDiv<<'\n';
	in.close();
	out.close();
	return 0;
}