Pagini recente » Cod sursa (job #199476) | Cod sursa (job #2845698) | Cod sursa (job #651253) | Cod sursa (job #995305) | Cod sursa (job #1003271)
#include<fstream>
using namespace std;
int P,Q,fact[100],e[100],nrf;
inline bool Ok(long long B)
{
int i;
long long p,nr;
for(i=1;i<=nrf;i++)
{
p=fact[i];
nr=0;
while(B>=p && nr<1LL*e[i])
{
nr+=B/p;
p*=1LL*fact[i];
}
if(nr<1LL*e[i])
return false;
}
return true;
}
inline long long CautareBinara()
{
long long st,dr,mij,rez;
st=0;
dr=rez=1000000000000000000LL;
while(st<=dr)
{
mij=(st+dr)/2LL;
if(Ok(mij))
{
rez=mij;
dr=mij-1LL;
}
else
st=mij+1LL;
}
return rez;
}
int main()
{
int i;
ifstream fin("gfact.in");
fin>>P>>Q;
fin.close();
if(P%2==0)
{
fact[++nrf]=2;
while(P%2==0)
{
e[nrf]++;
P/=2;
}
e[nrf]*=Q;
}
i=3;
while(i*i<=P)
{
if(P%i==0)
{
fact[++nrf]=i;
while(P%i==0)
{
e[nrf]++;
P/=i;
}
e[nrf]*=Q;
}
i+=2;
}
if(P>1)
{
fact[++nrf]=P;
e[nrf]=Q;
}
ofstream fout("gfact.out");
fout<<CautareBinara()<<"\n";
fout.close();
return 0;
}