Cod sursa(job #758493)

Utilizator informatician28Andrei Dinu informatician28 Data 15 iunie 2012 20:11:03
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Remember Mihai Pătrașcu Marime 0.72 kb
#include <fstream>
using namespace std;

long long S=1,n,b;
const long long mod=9901;

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

inline long long pow(long long x,long long n)
{
	if (!n)
		return 1;
	if (n==1)
		return x%mod;
	return pow(x*x%mod,n>>1)*pow(x,n&1)%mod;
}

inline void add(long long x,long long n)
{
	if (!x)
	{
		S=S*pow(mod-1,mod-1)%mod;
		return;
	}
	if (x == 1)
	{
		S=S*(n+1)%mod;
		return;
	}
	S = S*(pow(x,n+1)+mod-1)%mod*pow((x+mod-1)%mod,mod-2)%mod;
}

int main()
{
	long long i,p;
	in >> n >> b;
	for (i = 2;i*i<=n;i++)
		if (n % i == 0)
		{
			for (p = 0; n%i==0; p++,n/=i);
			add(i%mod,b*p);
		}
	if (n!=1)
		add(n%mod,b);
	out<<S<<"\n";
	return 0;
}