Pagini recente » Cod sursa (job #2727879) | Cod sursa (job #450664) | Cod sursa (job #1867694) | Cod sursa (job #561397) | Cod sursa (job #1972831)
#include <fstream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int k;
long long st,dr,mid;
long long p,b[1000],i,q;
long long nrbi,maxim;
pair <long long, long long> v[1000];
long long legendre(long long x, long long y)
{
long long sol = 0;
while (x/y != 0)
{
sol += x/y;
y *= y;
}
return sol;
}
int main()
{
fin >> p >> q;
for (i=2; i*i<=p; i++)
if (p%i == 0)
{
long long nr = 0;
while (p != 1)
p /= i, nr++;
st = 1;
dr = nr*q;
k++;
while (st <= dr)
{
mid = (st+dr)/2;
b[k] = mid*i;
nrbi = legendre(b[k], i);
if (nrbi == nr*q)
break;
else
if (nrbi < nr*q)
st = mid+1;
else
dr = mid-1;
}
}
if (p != 1)
{
st = 1;
dr = q;
k++;
while (st <= dr)
{
mid = (st+dr)/2;
b[k] = mid*p;
nrbi = legendre(b[k], p);
if (nrbi == q)
break;
else
if (nrbi < q)
st = mid+1;
else
dr = mid-1;
}
}
for (i=1; i<=k; i++)
{
st = 1;
dr = v[i].second*q;
while (st <= dr)
{
mid = (st+dr)/2;
b[i] = mid*v[i].first;
nrbi = legendre(b[k], v[i].first);
if (nrbi == v[i].second*q)
break;
else
if (nrbi < v[i].second*q)
st = mid+1;
else
dr = mid-1;
}
}
for (i=1; i<=k; i++)
maxim = max(maxim, b[i]);
fout << maxim;
return 0;
}