Pagini recente » Cod sursa (job #1932242) | Cod sursa (job #996536) | Cod sursa (job #2516563) | Cod sursa (job #1836585) | Cod sursa (job #1003269)
#include<fstream>
using namespace std;
int P,Q,fact[100],e[100],nrf;
inline bool Ok(int B)
{
int i,nr;
long long p;
for(i=1;i<=nrf;i++)
{
p=fact[i];
nr=0;
while(1LL*B>=p && nr<e[i])
{
nr+=B/p;
p*=1LL*fact[i];
}
if(nr<e[i])
return false;
}
return true;
}
inline int CautareBinara()
{
int st,dr,mij,rez;
st=0;
dr=rez=1000000000;
while(st<=dr)
{
mij=(st+dr)/2;
if(Ok(mij))
{
rez=mij;
dr=mij-1;
}
else
st=mij+1;
}
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;
}