Pagini recente » Cod sursa (job #1185702) | Cod sursa (job #2686928) | Cod sursa (job #1568219) | Cod sursa (job #2190637) | Cod sursa (job #1251258)
#include<stdio.h>
long long fact[30001],putere[30001],k,s,q,p;
long long puterea( long long n, long long p)
{
long long s=0;
while(p <= n)
{
s += n/p;
n = n/p;
}
return s;
}
bool verif ( long long x)
{
long long i,cate=0;
for(i=1; i<=k; i++)
{
s = puterea(x, fact[i]);
if(q*putere[i]>s)
return false;
}
return true;
}
long long cautbin ()
{
long long i=0,pas=1LL<<40LL;
while(pas!=0)
{
if(!verif(i+pas))
i+=pas;
pas>>=1;
}
return 1 + i;
}
int main()
{
long long i,r,pu;
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%lld%lld",&p,&q);
i=2;
while(i*i<=p)
{
if(p%i==0)
{
pu=0;
while(p%i==0)
{
p=p/i;
pu++;
}
k++;
fact[k]=i;
putere[k]=pu;
}
i++;
}
if(p!=1)
{
k++;
fact[k]=p;
putere[k]=1;
}
r=cautbin();
printf("%lld\n",r);
return 0;
}