Pagini recente » Cod sursa (job #2547617) | Cod sursa (job #2916950) | Cod sursa (job #48792) | Cod sursa (job #1681272) | Cod sursa (job #1972824)
#include <fstream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int i,k;
unsigned long long st,dr,mid;
unsigned long long p,b,nrb,maxim,q;
unsigned long long legendre(unsigned long long x, unsigned long long y)
{
unsigned 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;
unsigned long long t = nr*q;
while (st <= dr)
{
mid = (st+dr)/2;
b = mid*i;
nrb = legendre(b, i);
if (nrb == t)
break;
else
if (nrb < t)
st = mid+1;
else
dr = mid-1;
}
maxim = max(maxim, b);
}
if (p != 1)
{
st = 1;
dr = q;
while (st <= dr)
{
mid = (st+dr)/2;
b = mid*p;
nrb = legendre(b, p);
if (nrb == q)
break;
else
if (nrb < q)
st = mid+1;
else
dr = mid-1;
}
maxim = max(maxim, b);
}
fout << maxim;
return 0;
}