Pagini recente » Cod sursa (job #920104) | Cod sursa (job #2822057) | Cod sursa (job #3166448) | Cod sursa (job #1993723) | Cod sursa (job #2414662)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
const int NMAX = 20;
const long long INF = (1LL<<50);
long long baza[NMAX],putere[NMAX];
int k,P,Q;
void descompun(long long nr)
{
for(int i=2;1LL*i*i<=nr;i++)
{
if(nr%i==0)
{
baza[++k]=i;
while(nr%i==0)
{
nr/=i;
putere[k]++;
}
}
}
if(nr!=1)
{
baza[++k]=nr;
putere[k]=1;
}
}
bool verif(long long nr)
{
long long sum=0,b;
for(int i=1;i<=k;i++)
{
sum=0;
b=baza[i];
while(nr/b>0)
{
sum+=nr/b;
b*=baza[i];
}
if(sum<putere[i]*Q) return 0;
}
return 1;
}
int main()
{
fin >> P >> Q;
descompun(P);
long long st=0,dr=INF,mij,rasp;
while(st<=dr)
{
mij=(st+dr)/2;
if(verif(mij)==1)
{
dr=mij-1;
rasp=mij;
}
else st=mij+1;
}
fout << rasp;
return 0;
}