Cod sursa(job #282889)

Utilizator 630r63Ilinca George Mihai 630r63 Data 18 martie 2009 15:07:15
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
long long int a,b,baza[50],expo[50],nf,i,bb,ee,sol=1,p,sc,j;
void readd(),factorizare(),solve();
int main()
{
	readd();
	if(!b){printf("1");return 0;}
	factorizare();
	solve();
	return 0;
}
void readd()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%lld%lld",&a,&b);
}
void factorizare()
{
	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;}
}
void solve()
{
	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;}
	    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;}
	    sol*=ee;
	    sol%=9901;
	  }
	}
	printf("%lld",sol);
}