Pagini recente » Cod sursa (job #1805875) | Cod sursa (job #1781716) | Cod sursa (job #2948882) | Cod sursa (job #2386483) | Cod sursa (job #757708)
Cod sursa(job #757708)
#include<stdio.h>
#include<math.h>
FILE *f = fopen("sumdiv.in","r");
FILE *g = fopen("sumdiv.out","w");
#define Mod 9901
#define MaxFact 1000
int A,B,Sol = 1;
int Fact[MaxFact];
int Putere[MaxFact];
void citire(void)
{
fscanf(f,"%d %d",&A,&B);
}
inline int PutLg(int baza,int exp)
{
if(exp == 1)
return baza;
int baza1 = baza;
baza = PutLg(baza,exp/2);
baza = (1LL*baza*baza)%Mod;
if(exp&1) baza = (1LL*baza*baza1)%Mod;
return baza;
}
void Descompunere(void)
{
int x = (int)sqrt(A);
for(int i=2;i<=x && A != 1;i++)
if(A%i == 0)
{
Fact[++Fact[0]] = i;
for(;A%i == 0;Putere[Fact[0]] ++,A /= i);
}
if(A != 1)
Fact[++Fact[0]] = A,Putere[Fact[0]] = 1;
}
inline int ValidNumar(int a)
{
return (Mod+a)%Mod;
}
void Rezolvare(void)
{
Descompunere();
for(int i=1;i<=Fact[0];i++)
Sol = (1LL*Sol*ValidNumar(PutLg(Fact[i]%Mod,B*Putere[i]+1)-1)*PutLg((Fact[i]-1)%Mod,Mod-2))%Mod;
}
int main()
{
citire();
Rezolvare();
fprintf(g,"%d\n",Sol);
}