Pagini recente » Cod sursa (job #1064599) | Cod sursa (job #1865218) | Cod sursa (job #181404) | denisilie | Cod sursa (job #2656149)
#include <fstream>
#include <bitset>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
/*
ifstream cin("ciorna.in");
ofstream cout("ciorna.out");*/
const int nmax=44723;
bitset <nmax> c;
int p,q,nr[4653]= {1,2},fact[14],exp[14],dim;
//4647
bool ok(int ceva){
for (int i=1;i<=dim;++i){
int cnt=0,lim=exp[i]*q;
for (int j=fact[i];j<=ceva and cnt<lim;j*=fact[i])
cnt+=ceva/j;
if (cnt<lim)
return 0;
}
return 1;
}
int bs(int st, int dr){
int last;
while (st<=dr){
int med=((st+dr)>>1);
if (ok(med))
{
last=med;
dr=med-1;
}
else st=med+1;
}
return last;
}
int main()
{
for (int i=3; i<=nmax; i+=2)
if (!c[i])
{
nr[++nr[0]]=i;
for (int j=i*i; j<=nmax; j+=(i<<1))
c[j]=1;
}/*
int cnt=0;
for (int i=2; i<=nmax; ++i)
cnt+=!c[i];*/
cin>>p>>q;
for (int i=1;i<=nr[0] and nr[i]*nr[i]<=p;++i)
{
if (p%nr[i])
continue;
fact[++dim]=i;
for (;p%nr[i]==0;p/=nr[i]) exp[dim]++;
}
if (p>1){
fact[++dim]=p;
exp[dim]=1;
}
cout<<bs(1,1000000);
}