Cod sursa(job #2365575)

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

using namespace std;

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

const int mod = 9901;

#define int long long

int lgpow(int a, int b)
{
	if(a % mod == 0)
		return 0;
	
	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;
	}
	
	int s = 1;
	int i = 2;
	
	while(a > 1)
	{
		int nr = 0;
		
		while(a % i == 0)
		{
			a /= i;
			nr++;
		}
		
		if(nr)
		{
			if(i % mod == 1)
			{
				s *= (b + 1) % mod;
				s %= mod;
			}
			else
			{
				nr %= mod;
				
				s *= (lgpow(i % mod, nr * b + 1) - 1) % mod;
				s %= mod;
				s *= inv(i - 1);
				s %= mod;
			}
		}
		
		i++;
		
		if(a > 1 && i * i > a)
			i = a;
	}
	
	out << s;
}