Pagini recente » Cod sursa (job #2766490) | Cod sursa (job #2219345) | Cod sursa (job #3345105) | Cod sursa (job #2420375) | Cod sursa (job #3353488)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int p,q;
struct prim
{
int nr,p;
};
vector<prim> v;
long long calc(long long d,long long x)
{
long long cop=d,rez=0;
while(x>=d)
{
rez+=x/d;
d*=cop;
}
return rez;
}
bool verif(long long nr)
{
for(int i=0; i<v.size(); i++)
{
if(calc(v[i].nr,nr)<v[i].p)
return 0;
}
return 1;
}
int main()
{
fin>>p>>q;
int d=2;
while(p>1)
{
if(p%d==0)
{
v.push_back({d,0});
while(p%d==0)
{
p/=d;
v.back().p++;
}
v.back().p*=q;
}
d++;
if(p>1 && d*d>p)
d=p;
}
long long st=1,dr=LLONG_MAX,mij=0,rez=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(verif(mij))
{
dr=mij-1;
rez=mij;
}
else
st=mij+1;
}
fout<<rez;
return 0;
}