Pagini recente » Cod sursa (job #2568931) | Cod sursa (job #955482) | Cod sursa (job #2653934) | Cod sursa (job #1718421) | Cod sursa (job #1173755)
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
long long P,Q;
long long Prime[10005],Exp[10005],ind;
void Prime_Facts()
{
long long i=2;
while(i*i<=P)
{
if(P%i==0)
Prime[++ind]=i;
while(P%i==0)
{
Exp[ind]+=Q;
P/=i;
}
++i;
}
if(P!=1)
{
Prime[++ind]=P;
Exp[ind]=Q;
}
}
bool Valid(long long value)
{
for(long long i=1;i<=ind;i++)
{
long long prime=Prime[i],counter=0;
while(value>=prime)
{
counter+=value/prime;
prime*=Prime[i];
}
if(counter<Exp[i])
return 0;
}
return 1;
}
void Binary_Search()
{
long long left=1,right=(long long)2000000000*(long long)30000,middle,solution=0;
while(left<=right)
{
middle=(left+right)/2;
if(Valid(middle)==1)
{
solution=middle;
right=middle-1;
}
else
left=middle+1;
}
g<<solution<<"\n";
}
int main()
{
f>>P>>Q;
Prime_Facts();
Binary_Search();
return 0;
}