Cod sursa(job #547890)

Utilizator lianaliana tucar liana Data 6 martie 2011 19:48:18
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#define modulo 9901
long int put, d, a, b, rez, p, put1, x, dd, pa, i;

long int sum(long int k)
{
	if (k==0)
	{
		put=1;
		return 1;
	}
	else
		if (k%2==0)
		{
			x=sum(k-1);
			put=(put*d)%modulo;
			return (x+put)%modulo; 
		}
		else
		{
			x=sum(k/2);
			put1=put; put=((put*put)%modulo*d)%modulo;
			return (x+(x*put1)%modulo*d)%modulo;
		}
}

int main()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%ld %ld",&a, &b);
	dd=2; rez=1;
	while (dd*dd<=a)
	{
		p=0;
		while (a%dd==0)
		{	a/=dd; p++;	}
		d=dd%modulo;
		rez=(rez*sum(p*b))%modulo;
		if (dd==2)
			dd++;
		else
			dd+=2;
	}
	if (a>1)
	{
		d=a%modulo;
		rez=(rez*sum(b))%modulo;
	}
	printf("%ld",rez);
	return 0;
}