Pagini recente » Cod sursa (job #3004309) | Cod sursa (job #1622356) | Cod sursa (job #2822761) | Cod sursa (job #99071) | Cod sursa (job #3353075)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
long long n, p, q, prim[2000], pp[2000], d, cnt, st, dr, mij, rez;
int verif(int f){
int cat=0, a;
for(int i=1; i<=cnt; i++){
a=0;
cat=prim[i];
while(f>=cat){
a+=f/cat;
cat*=prim[i];
}
if(a<pp[i]*q){
return 0;
}
}
return 1;
}
int main()
{
fin>>p>>q;
n=p;
for(int d=2; d*d<=n; d++)
{
if(p%d==0)
{
prim[++cnt]=d;
while(p%d==0)
{
p/=d;
pp[cnt]++;
}
}
}
if(p!=1)
{
prim[++cnt]=p;
pp[cnt]=1;
}
st=1;
p=n;
dr=p*q;
while(st<=dr){
mij=(st+dr)/2;
if(verif(mij)==1){
dr=mij-1;
rez=mij;
}
else
st=mij+1;
}
fout<<rez;
return 0;
}