Cod sursa(job #543943)

Utilizator noobakafloFlorin eu noobakaflo Data 28 februarie 2011 19:54:32
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 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;
}