Pagini recente » Cod sursa (job #2896716) | Cod sursa (job #1494593) | Cod sursa (job #765372) | Cod sursa (job #918536) | Cod sursa (job #2355634)
#include <fstream>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int mn,k,st,dr,mij,ok,rez,p,q;
struct chestie{
int e,nr;
}fact[25];
bool verif(int x);
void scanandprec();
int power(int x,int e);
int main()
{
scanandprec();
st=p;
dr=q*p;
while(st<=dr)
{
mij=(st+dr)/2;
ok=verif(mij);
if(ok==1)
{
rez=mij;
dr=mij-1;
}
else st=mij+1;
}
cout<<rez<<'\n';
return 0;
}
int power(int x,int e)
{
if(e==0)
return 1;
int P=power(x,e/2);
if(e%2==1)
return P*P*x;
return P*P;
}
bool verif(int x){
int pp,rasp,NR,init;
mn=2000000000;
for(int i=1;i<=k;i++)
{
NR=init=power(fact[i].nr,fact[i].e);
rasp=0;
while(NR<=x)
rasp+=(x/NR),NR=NR*init;
mn=min(mn,rasp);
}
if(mn>=q)
return 1;
return 0;
}
void scanandprec()
{
cin>>p>>q;
k=0;
int n=p;
if(n%2==0)
{
++k;
while(n%2==0&&n)
fact[k].e++,n/=2;
fact[k].nr=2;
}
for(int d=3; d*d<=n; d+=2)
if(n%d==0)
{
++k;
while(n%d==0&&n)
fact[k].e++,n/=2;
fact[k].nr=d;
}
if(n>1)
fact[++k].nr=n,fact[k].e=1;
}