Cod sursa(job #757345)

Utilizator Marius96Marius Gavrilescu Marius96 Data 11 iunie 2012 21:24:37
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Remember Mihai Pătrașcu Marime 0.55 kb
#include<cstdio>
#include<cmath>
#define MOD 9901
int a,b;

int modpow (int x,int y)
{
	if(y==1)
		return x;
	int n=modpow (x,y/2);
	n=(n*n)%MOD;
	if(y%2)
		n=(n*x)%MOD;
	return n;
}

int calc (int d)
{
	int e=0;
	while(a%d==0)
		e++,a/=d;
	int n=(modpow (d,e*b+1)-1+MOD)%MOD;
	int m=(d-1+MOD)%MOD;
	return (n*modpow (m,MOD-2))%MOD;
}

int main()
{
	freopen ("sumdiv.in","r",stdin);
	freopen ("sumdiv.out","w",stdout);
	int r=1;
	scanf ("%d%d",&a,&b);
	if(a%2==0)
		r=calc (2);
	for(int i=3;i<=sqrt (a);i++)
		if(a%i==0)
			r=(r*calc (i))%MOD;
	printf ("%d",r);
}