Pagini recente » Cod sursa (job #56964) | Cod sursa (job #1129741) | Cod sursa (job #2298376) | Cod sursa (job #1961568) | Cod sursa (job #2356498)
#include <fstream>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
#define MAX(a, b) ((a > b) ? (a) : (b))
bool p[50005];
int v[50005];
void ciur() {
for(long long int i = 2; i <= 225; i++) {
if(p[i] == 0) {
for(int j = i<<2; j <= 50000; j += i)
p[j] = 1;
}
}
p[0] = 1;
p[1] = 1;
}
///Result for prime number
long long int gfact(long long int p, long long int m) {
long long int st = 0;
long long int dr = m;
long long int mid, calc, power;
while(st < dr) {
mid = (st+dr)/2;
calc = 0;
power = 1;
for(int i = 0; i < 10; i++) {
calc += (int) (mid/power);
power *= p;
}
//cout << mid << " " << calc << endl;
if(calc < m)
st = mid+1;
else
dr = mid;
}
//cout << p << " " << mid << " " << calc << endl;
return p*st;
}
int main()
{
long long int a, b;
cin >> a >> b;
ciur();
//cout << p[19];
for(int i = 0; i <= 50000; i++) {
if(p[i] == 0) {
while(a % i == 0) {
a /= i;
v[i]++;
}
}
}
//cout << endl;
long long int maxim = 0;
for(int i = 0; i <= 50000; i++) {
if(v[i] > 0) {
maxim = MAX(maxim, gfact(i, v[i]*b));
}
}
if(a > 1) {
maxim = MAX(maxim, gfact(a, b));
}
cout << maxim << endl;
//cout << gfact(2, 2);
}