Pagini recente » Cod sursa (job #294693) | Cod sursa (job #144959) | Cod sursa (job #351417) | Cod sursa (job #3189771) | Cod sursa (job #3226536)
#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 fast_expo(int b, int expo)
{
long long a=b, p=1;
for(;expo;expo>>=1)
{
if(expo&1) p*=a;
a*=a;
}
return p;
}
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=d*q*e, med, last=0;
while(st<=dr)
{
med=(st+dr)/2;
if(legendre(med,d)>=q)
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
void max_fact_prim()
{
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;
max_fact_prim();
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;
}