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; } --