Pagini recente » Cod sursa (job #2747444) | Cod sursa (job #3041620) | Cod sursa (job #2616148) | Cod sursa (job #2552290) | Cod sursa (job #2832687)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
const long long maxx=(1LL<<62);
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long maxd(long long a)
{
long long div=3,rez=1;
if(a%2==0)
{
rez=2;
a/=2;
}
while(a%2==0)
{
a/=2;
}
while(div*div<=a && a!=1)
{
if(a%div==0)
{
a/=div;
rez=div;
}
while(a%div==0)
{
a/=div;
}
a+=2;
}
if(a!=1)
{
return a;
}
return rez;
}
long long nrdiv(long long a,long long div)
{
long long rez=0;
while(a%div==0)
{
rez++;
a/=div;
}
return rez;
}
long long rez(long long n,long long d)
{
long long s=0,p=d;
while(p<=n)
{
s+=(n/p);
p*=d;
}
return s;
}
int main()
{
long long a,b;
fin>>a>>b;
long long div=maxd(a),nr=nrdiv(a,div)*b,dr=maxx,st=1,ans=maxx;
while(st<=dr)
{
long long m=((st+dr)>>1);
if(rez(m,div)>=nr)
{
ans=m-(m%div);
dr=m-1;
}
else
{
st=m+1;
}
}
fout<<ans;
}