Pagini recente » Cod sursa (job #624425) | Cod sursa (job #1082536) | Cod sursa (job #516295) | Cod sursa (job #873098) | Cod sursa (job #2789958)
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int p, q;
long long x=1;
long long howMany(long long b, long long p)
{
long long putere = p;
long long cnt=0;
while(putere <= b)
cnt += b/putere, putere*=p;
return cnt;
}
long long getSol(long long baza, long long puterea)
{
long long l=1, r = 6 * x, mid, sol=0;
while(l <= r)
{
mid = (l+r)/2;
long long cnt = howMany(mid, baza);
if(cnt < puterea)
l = mid+1;
else if(cnt == puterea)
sol = mid, r=mid-1;
else r=mid-1;
}
return sol;
}
int main() {
f>>p>>q;
for(int i=1; i<=13; i++)
x*=10;
long long exp=0;
long long sol=0;
while(p%2==0)
p/=2, exp++;
sol = max(sol, getSol(2, exp*q));
for(long long i=3; i*i <= p; i+=2)
if(p%i == 0)
{
exp=0;
while(p%i==0)
p/=i, exp++;
sol = max(sol, getSol(i, exp*q));
}
if(p != 1)
sol = max(sol, getSol(p, q));
g<<sol<<'\n';
return 0;
}