Pagini recente » Cod sursa (job #1513325) | Cod sursa (job #1495997) | Rating petruta (andrei_petruta) | Cod sursa (job #1844363) | Cod sursa (job #2356223)
#include <fstream>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
struct chestie{
long long e,nr;
}fact[100];
long long dr,mij,rez,mn,k,st,ok,p,q;;
bool verif(long long x);
void scanandprec();
long long power(long long x,long long e);
int main()
{
scanandprec();
st=p;
dr=q*p;
while(st<=dr)
{
mij=(st+dr)/2;
ok=verif(mij);
if(ok==1)
{
rez=mij;
dr=mij-1;
}
else st=mij+1;
}
cout<<rez<<'\n';
return 0;
}
long long power(long long x,long long e)
{
if(e==0)
return 1;
long long P=power(x,e/2);
if(e%2==1)
return P*P*x;
return P*P;
}
bool verif(long long x){
long long pp,rasp,NR,init;
mn=2000000000;
for(long long i=1;i<=k;i++)
{
NR=init=fact[i].nr;
rasp=0;
while(NR<=x)
rasp+=(x/NR),NR=NR*init;
if(rasp<fact[i].e*q)
return 0;
}
return 1;
}
void scanandprec()
{
cin>>p>>q;
k=0;
long long n=p;
if(n%2==0)
{
++k;
while(n%2==0&&n)
fact[k].e++,n/=2;
fact[k].nr=2;
}
for(long long d=3; d*d<=n; d+=2)
if(n%d==0)
{
++k;
while(n%d==0&&n)
fact[k].e++,n/=2;
fact[k].nr=d;
}
if(n>1)
fact[++k].nr=n,fact[k].e=1;
}