Pagini recente » Cod sursa (job #561856) | Cod sursa (job #1624853) | Cod sursa (job #504489) | Cod sursa (job #2534879) | Cod sursa (job #3226540)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
const int NMAX=1000;
int p, q, k;
struct FACTORI
{
int d, e;
}v[NMAX+5];
long long legendre(long long n, int d)
{
long long numitor=d, s=0;
while(numitor<=n)
{
s+=n/numitor;
numitor*=d;
}
return s;
}
long long cautare_binare(int d, int e)
{
long long st=1, dr=1LL*d*e*q, med, last=0;
while(st<=dr)
{
med=(st+dr)/2;
if(legendre(med,d)>=1LL*q*e)
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
void descompunere_in_factori_primi()
{
int n=p, d=2, e;
k=0;
while(d*d<=n)
{
e=0;
while(n%d==0)
{
e++;
n/=d;
}
if(e)
{
v[++k].d=d;
v[k].e=e;
}
d++;
}
if(n>1)
{
v[++k].d=n;
v[k].e=1;
}
}
int main()
{
int i;
long long maxb=0;
fin >> p >> q;
descompunere_in_factori_primi();
for(i=1; i<=k; ++i)
{
long long aux=cautare_binare(v[i].d,v[i].e);
if(maxb<aux)
maxb=aux;
}
fout << maxb;
return 0;
}