Pagini recente » Cod sursa (job #2930319) | Cod sursa (job #2793430) | Cod sursa (job #187021) | Cod sursa (job #1659485) | Cod sursa (job #83810)
Cod sursa(job #83810)
#include<stdio.h>
long long n, p, v[1000000], d[50000], nr, u[50000], div[100], nrdiv, contor, rez;
void erat1()
{
long long i, j;
for (i=2; i*i<=n; i++)
{
if (u[i]==0)
{
d[++nr]=i;
j=2;
while (i*j<n) u[i*(j++)]=1;
}
}
}
void descomp()
{
long long i, aux=n;
for (i=1; i<=nr; i++)
{ if (aux==1) break;
if (aux%d[i]==0) {div[++nrdiv]=d[i]; while (aux%d[i]==0) aux/=d[i];}
}
}
int erat2()
{
long long i, j, ok=1, k, aux;
j=1;
for (i=1; i<=nrdiv; i++)
{
while (j<=d[i]){ if (v[j]==0) contor++;j++;if (contor==p) ok=0; break;}
if (ok==0) break;
aux=d[i];
for (k=2; aux*k<n*n; k++) v[aux*k]=1;
}
while (contor!=p) {j++; if (v[j]==0) contor++;}
return j;
}
void calcul()
{
freopen("frac.in","r",stdin);
scanf("%lld%lld",&n,&p);
erat1();
descomp();
rez=erat2();
freopen("frac.out","w",stdout);
printf("%d",rez);
}
int main()
{
calcul();
return 0;
}