Pagini recente » Cod sursa (job #1978858) | Cod sursa (job #168680) | Cod sursa (job #1630989) | Cod sursa (job #2410017) | Cod sursa (job #2088104)
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int dp[80000], e[80000];
long long p, r;
int ndp, q;
long long putere(long long n, int x)
{
long long nr = 0;
while (n >= x)
{
nr += n/x;
n /= x;
}
return nr;
}
bool sedivide(long long n){
for (int i = 1; i <= ndp; i++)
if (putere(n, dp[i]) < e[i] * q)
return false;
return true;
}
int main()
{
f >> p >> q;
long long n = p, pas = 1LL << 45;
int d = 2;
while (d * d <= n)
{
if (n % d == 0)
{
dp[++ndp] = d;
p = 0;
while (n%d == 0)
{
n /= d;
p++;
}
e[ndp] = p;
}
d++;
}
if (n != 1){
dp[++ndp] = n;
e[ndp] = 1;
}
while (pas != 0)
{
if (!sedivide(r + pas))
r += pas;
pas /= 2;
}
r++;
g << r;
return 0;
}