Pagini recente » Cod sursa (job #1428062) | Cod sursa (job #1599467) | Cod sursa (job #2456477) | Cod sursa (job #1193158) | Cod sursa (job #1972823)
#include <fstream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int i,k,q;
int st,dr,mid;
unsigned long long p,b,nrb,maxim;
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;
while (st <= dr)
{
mid = (st+dr)/2;
b = mid*i;
nrb = legendre(b, i);
if (nrb == nr*q)
break;
else
if (nrb < nr*q)
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;
}