Pagini recente » Cod sursa (job #2017410) | Cod sursa (job #2379631) | Cod sursa (job #1053820) | Cod sursa (job #1681950) | Cod sursa (job #1331567)
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
bitset <50001> viz;
int v[50001],diviz[31],i,j,c,l,p,q,o;
bool ok;
long long st,dr,m,vd,best,pr,expo[31];
int main()
{
f>>p>>q;
v[1]=2;
l=1;
c=sqrt(p);
for (i=2;i<=c;i++)
if (viz[i]==false)
{
j=i*i;
if (j/i==i)
for (j=i*i;j<=c;j+=i)
viz[j]=true;
}
vd=p;
for (i=1;i<=l;i++)
if (vd%v[i]==0)
{
while(vd%v[i]==0)
vd=vd/v[i];
diviz[++o]=v[i];}
if (vd>1)
diviz[++o]=vd;
st=1,dr=((1ll<<60)-1);
best=-1;
while(st<=dr)
{
m=(st+dr)/2;
for (i=1;i<=o;i++)
expo[i]=0;
for (i=1;i<=o;i++)
{
vd=m;
pr=1;
while(pr<=vd/diviz[i])
pr=pr*diviz[i],expo[i]+=(vd/pr);
}
ok=true;
for (i=1;i<=o;i++)
if (expo[i]<q) ok=false;
if (ok==false) st=m+1;
else best=m,dr=m-1;
}
g<<best;
return 0;
}