Pagini recente » Cod sursa (job #2128386) | Cod sursa (job #1875149) | Cod sursa (job #1296986) | Cod sursa (job #1517766) | Cod sursa (job #2101855)
#include <stdio.h>
#include <stdlib.h>
#define LL long long
int b[21],e[21],nr;
int legendre(int i,LL f)
{
LL pi=b[i],z=0;
while(pi<=f)
{
z+=(f/pi);
pi*=b[i];
}
return z>=e[i];
}
int verif(LL f)
{
int fl=1;
for(int i=1; i<=nr && fl; i++)
fl=legendre(i,f);
return fl;
}
int main()
{
int p,q,div;
LL pas,rez;
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&p,&q);
div=2;
while(div*div<=p)
{
if(!(p%div))
{
nr++;
while(!(p%div))
p/=div,e[nr]++;
b[nr]=div;
e[nr]*=q;
}
div++;
}
if(p-1)
e[++nr]=q,b[nr]=p;
pas=((LL)1<<54);
rez=0;
while(pas)
{
if(!verif(rez+pas))
rez+=pas;
pas/=2;
}
printf("%lld\n",rez+1);
return 0;
}