Cod sursa(job #756591)

Utilizator VisuianMihaiMihai Visuian VisuianMihai Data 9 iunie 2012 22:26:48
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Remember Mihai Pătrașcu Marime 0.64 kb
#include<fstream>
#define MOD 9901
using namespace std;
ifstream fin ("sumdiv.in");
ofstream fout ("sumdiv.out");

int A, B, S = 1;

int pute(int x, long long p)
{
	int sol = 1;

	while ( p )
	{
		if(p & 1)
			sol = (sol * x) % MOD;
		x = (x * x) % MOD;
		p >>= 1;
	}

	return sol;
}

int main()
{
	fin >> A >> B;
	int a = A;
	for(int i = 2; i*i <= A; ++i)
	{
		int p = 0;
		while(a % i == 0)
			a /= i, ++p;
		if(p)
			S *= (pute(i, 1LL*p*B+1)-1) * pute(i-1, MOD-2),
			S %= MOD;
	}
	if(a > 1)
		S *= (pute(a, B+1) - 1) * pute(a-1, MOD-2),
	S %= MOD;
	fout << S;
	
	fin.close();
	fout.close();
	return 0;
}