Cod sursa(job #2638027)

Utilizator MarcGrecMarc Grec MarcGrec Data 26 iulie 2020 14:08:32
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.72 kb
#define MOD 9901

#include <fstream>
using namespace std;

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

int A, B;

int XN(int X, int N);

int main()
{
	fin >> A >> B;
	
	int res = (1 + (XN(A, B + 1) - A) / (A - 1)) % MOD;
	for (int i = 2; (i * i) <= A; ++i)
	{
		if ((A % i) == 0)
		{
			res = (res + ((XN(i, B + 1) - i) / (i - 1))) % MOD;
			
			
			if (i != (A / i))
			{
				res = (res + ((XN((A / i), B + 1) - (A / i)) / ((A / i) - 1))) % MOD;
			}
		}
	}
	
	fout << res;
	
	fin.close();
	fout.close();
	return 0;
}

int XN(int X, int N)
{
	if (N == 0)
	{
		return 1;
	}
	
	int P = XN(X, N / 2);
	P    *= P;
	P    %= MOD;
	
	return (P * (((N % 2) == 0) ? 1 : X)) % MOD;
}