Can someone explain how this code works ...
void sieve(int n)
{
int x=n/2, y=(int)sqrt(n);
arr[1]=2;
for(int i=1;i<=x;i++)
prime[i]=false;
for (int i=1; i<=y; i++)
{
if (!prime[i])
{
for (int j=3*i+1;j<=x;j+=(2*i+1))
prime[j] = true;
}
}
for (int i=1; i<=x; i++)
if(!prime[i])
arr[k++]=2*i+1;
}
--
