Cod sursa(job #623875)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 20 octombrie 2011 21:18:06
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <cstdio>
#define mod 9901

int a, b, sol, v[10000], p[10000], 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 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+mod)%mod*pow(v[i]-1, mod-2))%mod;
	printf("%d",sol);
}