Pagini recente » Cod sursa (job #538808) | Cod sursa (job #2422637) | Cod sursa (job #892723) | Cod sursa (job #2723058) | Cod sursa (job #812037)
Cod sursa(job #812037)
#include<fstream>
#include<math.h>
using namespace std;
int fac[20],nr=1,power[20];
long long p,q;
void desc(long long n)
{
double lim=sqrt((double)n);
long long d,e,x=n;
d=2;
while(d<=lim&&x>1)
{
e=0;
while(x%d==0)
{
e++;
x=x/d;
}
if(e>0)
{
fac[nr]=d;
power[nr]=e*q;
nr++;
}
d++;
}
if(x>1)
{
fac[nr]=x;
power[nr]=1*q;
nr++;
}
}
long long mult(long long n,long long k)
{
long long aux=k,raspuns=0;
while(n>=aux)
{
raspuns+=n/aux;
aux*=k;
}
return raspuns;
}
bool verif(long long med)
{
int i;
for(i=1;i<nr;i++)
if(mult(med,fac[i])<power[i])
return 0;
return 1;
}
long long bs()
{
long long st,dr,med,last;
st=1;
dr=pow((double)2,(double)60)-1;
while(st<=dr)
{
med=st+(dr-st)/2;
if(verif(med)==0)
st=med+1;
else
{
dr=med-1;
last=med;
}
}
return last;
}
int main()
{
ifstream f("gfact.in");
ofstream g("gfact.out");
f>>p>>q;
desc(p);
long long x=bs();
g<<x;
}