Cod sursa(job #2365537)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 4 martie 2019 14:33:49
Problema Suma divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;

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

const int mod = 9901;

#define int long long

vector <pair <int, int> > p;

int lgpow(int a, int b)
{
	int res = 1;
	
	while(b)
	{
		if(b & 1)
			res = (res * a) % mod;
		
		b >>= 1;
		a = (a * a) % mod;
	}
	
	return res;
}

int inv(int x)
{
	return lgpow(x, mod - 2);
}

main()
{
	int a, b;
	in >> a >> b;
	
	if(b == 0)
	{
		out << 1;
		return 0;
	}
	
	if(a == 0)
	{
		out << 0;
		return 0;
	}
	
	if(a == 1)
	{
		out << 1;
		return 0;
	}
	
	for(int i = 2; i * i <= a; i++)
	{
		int nr = 0;
		
		while(a % i == 0)
		{
			a /= i;
			nr++;
		}
		
		if(nr)
		{
			p.push_back({i, nr * b});
		}
	}
	
	if(a > 1)
	{
		p.push_back({a, b});
	}
	
	int s = 1;
	
	for(auto i : p)
		s = ((s * (lgpow(i.first, i.second + 1) - 1) ) % mod * inv(i.first - 1)) % mod;
	
	out << s;
}