Pagini recente » Cod sursa (job #902153) | Cod sursa (job #2880291) | Cod sursa (job #1668532) | Cod sursa (job #520321) | Cod sursa (job #1909123)
#include <cstdio>
#include <bitset>
using namespace std;
int le(int x , int k)
{
int tot=0,prod=k;
while(prod<=x)
{
tot+=x/prod;
prod*=k;
}
return tot;
}
bitset<20005>a;
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
int i ,j;
a[0]=a[1]=1;
for(i=4;i<=20000;i+=2)a[i]=1;
for(i=3;i * i <=20000;i+=2)
if(!a[i])
for(j=i*i;j<=20000;j+=2*i)a[j]=1;
int max=0,e=0,q,n;
scanf("%d%d",&n,&q);
while(n>1&&n%2==0)
{
e++;
n/=2;
}
if(e)max=2;
for(i=3;i<=20000;i+=2)
{
if(i*i>n)break;
if(!a[i])
{
int nr=a[i];
e=0;
while(n>1&&n%nr==0)
{
e++;
n/=nr;
}
if(e)max=nr;
}
}
if(n>1)
{
if(n>max)max=n;
}
int st=1,dr=2000000000;
while(st<dr)
{
int mij=(dr-st)/2+st;
int x=le(mij,max);
if(x<q)st=mij+1;
if(x>q)dr=mij-1;
if(x==q)
dr=mij;
}
printf("%d",st);
return 0;
}