import java.util.Scanner;
public class BooleanPrimes {
public static int counter ;
public static void main(String[] argh)
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a number: ");
int size = scanner.nextInt();
boolean[] boolArray = new boolean[size+1];
generateBoolArray(boolArray,size+1);
}
public static boolean[] generateBoolArray(boolean[] boolArr, int size) // initializing boolean array with true values
{
for (int i = 2; i < size; ++i)
{
boolArr[i] = true;
}
return chickIfIndexPrime(boolArr, boolArr.length,size);
}
public static boolean[] chickIfIndexPrime(boolean[] arrIsPrime, int input, int size)
{
int start = 2;
while (start*start <= input) // first+second loop checking if start is prime
{
int i = 2;
boolean isprime = true;
while(i*i < start && isprime ) // second loop
{
if(start%i == 0) {
isprime = false;
}
++i;
}
if(isprime==true)
{
for(int j=4; j<arrIsPrime.length;++j) // third loop checking if the index of the array is prime
{
if(j%start ==0 )
{
if(j == start)
{ // Bug Fixed
++j;
if(j >=arrIsPrime.length){
break;
}
}
arrIsPrime[j]=false;
}
}
}
++start;
}
printArray(arrIsPrime,size); // eventually printing the array
return arrIsPrime;
}
public static void printArray(boolean[] arr ,int size){
System.out.println("The prime numbers from 2 till "+(size-1));
int i=0,j = 0 ;
while(i<arr.length){
if(arr[i]==true){
System.out.print(i+" ");
}
++i;
}
System.out.println();
}
}