Cod sursa(job #623861)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 20 octombrie 2011 20:38:59
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <cstdio>
#define mod 9901

int a, b, sol, v[1000], p[1000], k;

int pow(int x, int n)
{
	int r=1;
	for (; n>0; n>>=1)
	{
		if (n&1) r=(r*x)%mod;
		x=(x*x)%mod;
	}
	return r;
}

int invers(int x)
{
	return pow(x, mod+1);
}

int main()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%d %d", &a, &b);
	int i, d, c;
	for (d=2; d*d<=a; d++)
	{
		c=0;
		while (!(a%d))
		{
			c++;
			a/=d;
		}
		if (c)
		{
			k++;
			v[k]=d;
			p[k]=c*b;
		}
	}
	if (a>1) 
	{
		v[++k]=a;
		p[k]=b;
	}
	sol=1;
	for (i=1; i<=k; i++)
		sol=(sol*((pow(v[i], p[i]+1)-1)*invers(v[i]-1))%mod)%mod;
	printf("%d",sol);
}