Pagini recente » Cod sursa (job #1865329) | Cod sursa (job #2872196) | Cod sursa (job #2782135) | Cod sursa (job #3179103) | Cod sursa (job #3275001)
#include <fstream>
using namespace std;
const int N = 10;
const long long VMIN = 1;
const long long VMAX = 60000000000000LL;
int dp[N], pdp[N], ndp, p, q;
void descompunere(int n)
{
int d = 2;
while (d * d <= n)
{
if (n % d == 0)
{
dp[ndp] = d;
while (n % d == 0)
{
pdp[ndp]++;
n /= d;
}
ndp++;
}
d++;
}
if (n != 1)
{
dp[ndp] = n;
pdp[ndp] = 1;
ndp++;
}
}
long long putere(long long n, int d)
{
long long p = 0;
while (n >= d)
{
p += n / d;
n /= d;
}
return p;
}
bool se_divide(long long n)
{
for (int i = 0; i < ndp; i++)
{
if (putere(n, dp[i]) < pdp[i] * q)
{
return false;
}
}
return true;
}
long long caut_bin()
{
long long st = VMIN, dr = VMAX, rez = dr + 1;
while (st <= dr)
{
long long m = (st + dr) / 2;
if (se_divide(m))
{
rez = m;
dr = m - 1;
}
else
{
st = m + 1;
}
}
return rez;
}
int main()
{
ifstream in("gfact.in");
ofstream out("gfact.out");
in >> p >> q;
descompunere(p);
out << caut_bin() << "\n";
in.close();
out.close();
return 0;
}