Pagini recente » Cod sursa (job #6456) | Cod sursa (job #2847080) | Cod sursa (job #1087097) | Cod sursa (job #3508) | Cod sursa (job #397796)
Cod sursa(job #397796)
#include <cstdio>
int p,q;
inline bool nasol(long long p1,long long p2)
{
return p2*q>p1;
}
inline int minimus(long long x,long long y)
{
return x < y ? x:y;
}
long long putere(int n,int p)
{
int rez=0;
while(n)
{
rez+=n/p;
n/=p;
}
return rez;
}
bool desc(long x,long a)
{
int p1,p2,min=1<<30;
for(int i=2;i*i<=a;++i)
{
if(!(a%i))
{
p1=putere(x,i);
p2=0;
while (a%i==0)
{
p2++;
a/=i;
}
if (nasol(p1,p2))
return false;
}
}
if(a!=1)
{
p1=putere(x,a);
p2=1;
if (nasol(p1,p2))
return false;
}
return true;
}
int caut()
{
int i,pas=1<<30;
for(i=0;pas;pas>>=1)
if(!desc(i+pas,p))
i+=pas;
return 1+i;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&p,&q);
printf("%d\n",caut());
return 0;
}