Cod sursa(job #83812)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 11 septembrie 2007 22:53:55
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>

long long n, p, v[2000000], 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("%lld",rez);
}

int main()
{
  calcul();
  return 0;
}