Pagini recente » Cod sursa (job #1335289) | Cod sursa (job #396885) | Cod sursa (job #1633281) | Cod sursa (job #3156674) | Cod sursa (job #1595812)
#include <fstream>
using namespace std;
long long exponent(long long prime, long long n)
{
long long nr = 0;
while(n!=0)
{
nr+=n/prime;
n/=prime;
}
return nr;
}
long long binarySearch(long long st, long long dr, int power, int prime)
{
if(st==dr)
return st-st%prime;
long long mid = (st+dr)/2;
long long k = exponent(prime, mid);
if(k==power)
return mid-mid%prime;
if(k<power)
return binarySearch(mid+1,dr,power,prime);
if(k>power)
return binarySearch(st,mid-1,power,prime);
}
long long solve(int p, int q)
{
bool contor = false;
long long maxim = 0;
for(int i=2;i*i<=p;i++)
{
if(p%i==0)
{
contor = true;
int j=0;
for(;p%i==0;p/=i, j++);
long long d = binarySearch(1,2000000000*30000, j*q, i);
if(d>maxim) maxim = d;
}
}
if(!contor)
{
long long d = binarySearch(1,60000000000000, q, p);
if(d>maxim) maxim = d;
}
return maxim;
}
int main()
{
ofstream out("gfact.out");
ifstream in("gfact.in");
int p, q;
in >> p >> q;
//out << p << q;
out << solve(p,q);
return 0;
}