Pagini recente » Cod sursa (job #1504084) | Cod sursa (job #2768874) | Cod sursa (job #2633972) | Cod sursa (job #2700780) | Cod sursa (job #2618855)
#include <bits/stdc++.h>
#define maxp 50000
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int p, q;
bitset<500005> ciur;
vector<int> prime;
bool is_ok(long long nr, long long val, long long coef)
{
long long curr = 1, rez = 0;
while(curr <= nr)
{
curr *= val;
rez += nr / curr;
if(rez >= coef)
return true;
}
return false;
}
int bn(int val, int coef)
{
long long low = 1, high = (long long)1 << 60, mid, rez;
while(low <= high)
{
long long mid = (low + high) / 2;
if(is_ok(mid, val, coef))
{
rez = mid;
high = mid - 1;
}
else
low = mid + 1;
}
return rez;
}
void Read()
{
f>>p>>q;
ciur.set(0); ciur.set(1);
for(int i = 2;i <= maxp;++i)
if(!ciur.test(i))
{
prime.push_back(i);
for(int j = i;j <= maxp;j += i)
ciur.set(j);
}
int a = p, rez = 0;
for(auto it : prime)
{
int cat = 0;
while(a % it == 0)
{
a /= it;
cat++;
}
cat *= q;
if(cat)
rez = max(rez, bn(it, cat));
if(it * it > p)
break;
}
if(a > 1)
rez = max(rez, bn(a, q));
g<<rez;
}
int main()
{
Read();
// Solve();
return 0;
}