Cod sursa(job #607758)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 13 august 2011 14:00:01
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>  
long long int a,b,baza[50],expo[50],nf,i,bb,ee,sol=1,p,sc,j;   
int main()  
{  
	freopen("sumdiv.in","r",stdin);  
	freopen("sumdiv.out","w",stdout);  
	scanf("%lld%lld",&a,&b); 
	if(!b)
	{
		printf("1");
		return 0;
	}  
	if(a%2==0)  
		baza[++nf]=2;  
	while(a%2==0)
	{
		expo[nf]++;
		a/=2;
	}  
	for(i=3;i<8000;i+=2)  
	if(a%i==0)  
		{ 
			baza[++nf]=i;  
			while(a%i==0)
			{
				expo[nf]++;
				a/=i;
			}  
		}  
	if(a>1)
	{
		baza[++nf]=a;
		expo[nf]=1;
	}   
	for(i=1;i<=nf;i++)  
	{ 
		bb=baza[i];
		ee=expo[i];  
		ee*=b;  
		bb%=9901;  
		if(bb>1)  
		{ 
			ee%=9900;  
			if(!ee)
			{
				sol=0;
				return 0;
			}  
			p=1;
			sc=1;
			for(j=1;j<=ee;j++)
			{
				p=(p*bb)%9901;
				sc+=p;
			}  
			sc%=9901;  
			sol*=sc;  
			sol%=9901;  
		}  
		if(bb==1)  
		{ 
			ee++;  
			ee%=9901;  
			if(!ee)
			{
				sol=0;
				return 0;
			}  
			sol*=ee;  
			sol%=9901;  
		}  
	}  
	printf("%lld",sol);
	return 0;  
}