Cod sursa(job #2313179)

Utilizator cipri321Marin Ciprian cipri321 Data 6 ianuarie 2019 11:59:47
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <fstream>
#include <vector>
#define MOD 9901
using namespace std;
ifstream fi("sumdiv.in");
ofstream fo("sumdiv.out");
int A,B;
vector<pair<int,int> > f;
int rez=1;
int ridlog(int x,int p)
{
	x=(x+MOD)%MOD;
	int rez=1;
	while(p)
	{
		if(p&1)
			rez=(1LL*rez*x)%MOD;
		x=(1LL*x*x)%MOD,p>>=1;
	}
	return rez;
}
int part(int x,int y)
{
	if(x==1)return (y+1)%MOD;
	int a=(ridlog(x, y+1)-1+MOD)%MOD;
	int b=ridlog(x-1,MOD-2);
	return (a*b)%MOD;
}
int main()
{
	fi>>A>>B;
	for(int i=2;i*i<=A;i++)
		if(A%i==0)
		{
			int exp=0;
			while(A%i==0)
				A/=i,exp++;
			f.push_back(make_pair(i%MOD,exp*B));
		}
	if(A>1)
		f.push_back(make_pair(A%MOD,B));
	for(auto it:f)
		rez=(rez*part(it.first,it.second))%MOD;
	fo<<rez;
	fi.close();
	fo.close();
	return 0;
}