Pagini recente » Cod sursa (job #2591971) | Cod sursa (job #1322496) | Cod sursa (job #952276) | Istoria paginii runda/p1-66/clasament | Cod sursa (job #1471542)
#include<bits/stdc++.h>
using namespace std;
int p,q,a[50],b[50],i,nr;
long long rs;
bool Check(long long x) {
long long poz=a[i],k=0;
while(x/poz>0) k+=x/poz,poz*=a[i];
return (k>=b[i]*q);
}
long long Search(long long st,long long dr) {
long long poz=dr;
while(st<=dr)
{
long long pivot=(st+dr)/2;
if(Check(pivot)) poz=pivot,dr=pivot-1;
else st=pivot+1;
}
return poz;
}
int main()
{
ifstream cin("gfact.in");
ofstream cout("gfact.out");
cin>>p>>q;
if(p==1) return cout<<"1\n",0;
for(i=2;i*i<=p;++i)
if(!(p%i)) for(a[++nr]=i;!(p%i);p/=i) ++b[nr];
if(p>1) a[++nr]=p,b[nr]=1;
for(i=1;i<=nr;++i) rs=max(rs,Search(1,1LL*a[i]*b[i]*q));
cout<<rs<<'\n';
return 0;
}