# Number of unmarked integers in a special sieve

Given an array A containing numbers from 2 to N.. A special type of sieving is done on it .
The procedure of sieving is as follows:

1. Create an array with elements as consecutive integers from 2 to N and mark every element in the array as unmarked.
2. Let an integer Q = N and mark all the proper divisors of Q except Q itself in the array.
3. Find the largest number unmarked less than Q and assign Q to it, and repeat from step 2. If there are no more unmarked elements then stop.

Find the number of unmarked integers after sieving.

Examples:

```Input : N = 5
Output : Number of unmarked elements = 3
Explanation : We create array A[] = { 2, 3, 4, 5 }.
2 is marked as it is a proper divisor of 4.

Input : N = 4
Output : Number of unmarked elements = 2```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach:
One basic approach is to run two loops. Outer loop to traverse the whole array and inner loop for traversing from 2 – Q to unmark all the proper divisors of Q by checking a[i] % Q = 0.

Time Complexity: O(N^2)

Efficient Approach:
A simple observation suggests that actually there is no need to do sieving here instead, the value of N will determine the answer.
Case 1: If N is Odd then number of unmarked elements will be (N/2) + 1.

Case 2: If N is Even then number of unmarked elements will be (N/2).

Time Complexity: O(1)

Examples:

Input : N = 5
Output : 3
A[] = { 2, 3, 4, 5 }
Steps:
1.) Q = 5 : Mark All the proper divisors of Q, here no element is there so every element remains unmarked.
3.) Q = 4 : Mark all the proper divisors of Q. Here 2 gets marked and unmarked elements are {3, 4, 5}.
5.) Q = 3 :
6.) Now no further marking can be done so stop here
So number of unmarked elements are 3 i.e {3, 4, 5}
In case of ODD value of N result should be (N/2)+1 = (3/2)+1 = (5/2)+1 = 2+1= 3.

Input : N = 4
Output : 2
A[] = { 2, 3, 4 }
Steps:
1.) Q = 4 Mark all the proper divisors of Q. So here 2 gets marked and unmarked elements are {3, 4}
3.) Q = 3
4.) Now no further marking can be done so stop here
So number of unmarked element after sieving are {3, 4} = 2
In case of EVEN value of N result should be (N/2) = (4/2) = 2

## C++

 `// C++ Program to determine the  ` `// number of unmarked integers in  ` `// a special sieve ` `#include ` `using` `namespace` `std; ` ` `  `int` `countUnmarked(``int` `N) ` `{ ` `    ``if` `(N % 2 == 0) ` `       ``return` `N/2; ` `    ``else` `       ``return` `N/2 + 1; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `N = 4; ` `    ``cout << ``"Number of unmarked elements: "`  `         ``<< countUnmarked(N) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java Program to determine  ` `// the number of unmarked  ` `// integers in a special sieve ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` `static` `int` `countUnmarked(``int` `N) ` `{ ` `    ``if` `(N % ``2` `== ``0``) ` `    ``return` `N / ``2``; ` `    ``else` `    ``return` `N / ``2` `+ ``1``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args)  ` `{ ` `    ``int` `N = ``4``; ` `    ``System.out.println(``"Number of unmarked "` `+  ` `                                ``"elements: "` `+  ` `                            ``countUnmarked(N)); ` `} ` `} ` ` `  `// This code is contributed ` `// by anuj_67. `

## Python3

 `# Python3 Program to determine  ` `# the number of unmarked  ` `# integers in a special sieve ` `def` `countUnmarked(N): ` `    ``if` `(N ``%` `2` `=``=` `0``): ` `        ``return` `N ``/` `2``; ` `    ``else``: ` `        ``return` `N ``/` `2` `+` `1``; ` ` `  `# Driver Code ` `N ``=` `4``; ` `print``(``"Number of unmarked elements:"``,  ` `              ``int``(countUnmarked(N))); ` `     `  `# This code is contributed ` `# by mits `

## C#

 `// C# Program to determine  ` `// the number of unmarked  ` `// integers in a special sieve ` `using` `System; ` ` `  `class` `GFG ` `{ ` `static` `int` `countUnmarked(``int` `N) ` `{ ` `    ``if` `(N % 2 == 0) ` `        ``return` `N / 2; ` `    ``else` `        ``return` `N / 2 + 1; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main ()  ` `{ ` `    ``int` `N = 4; ` `    ``Console.WriteLine(``"Number of unmarked "` `+  ` `                               ``"elements: "` `+  ` `                           ``countUnmarked(N)); ` `} ` `} ` ` `  `// This code is contributed ` `// by anuj_67. `

## PHP

 ` `

Output:

```Number of unmarked elements: 2
```

My Personal Notes arrow_drop_up Maths is the language of nature

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : vt_m, Mithun Kumar

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.