Pagini recente » Cod sursa (job #2777440) | Cod sursa (job #2564996) | Cod sursa (job #2625727) | Cod sursa (job #216495) | Cod sursa (job #2798028)
#include<iostream>
#include<fstream>
#include<climits>
using namespace std;
long long i, p, q, exp, rez;
long long howmany(long long b, long long p)
{
long long rez = 0, j = p;
while(j <= b)
{
rez += b / p;
j = j * p;
}
return rez;
}
int main()
{
freopen("gfact.in", "r", stdin);
freopen("gfact.out", "w", stdout);
cin >> p >> q;
if(p == 1)
{
cout << 1;
return 0;
}
long long y = p, x = p;
for(int i = 2; i * i <= x; i++)
{
if(y % i == 0)
{
int caut = 1, exp = 0 ;
while(y % i == 0)
{
exp++;
y = y / i;
}
long long st = 1;
long long dr = 60000000000000;
long long mij, sol = LLONG_MAX;
while(st <= dr)
{
mij = (st + dr) / 2;
if(howmany(mij, i) >= q * exp)
{
sol = min( mij, sol);
dr = mij - 1;
}
else st = mij + 1;
}
rez = max(rez, sol);
}
}
if(y >1)
{
long long st = 1;
long long dr = 60000000000000;
long long mij, sol = LLONG_MAX;
while(st <= dr)
{
mij = (st + dr) / 2;
if(howmany(mij, y) >= q)
{
sol = min( mij, sol);
dr = mij - 1;
}
else st = mij + 1;
}
rez = max(rez, sol);
}
cout << rez;
}