# 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:

- Create an array with elements as consecutive integers from 2 to N and mark every element in the array as unmarked.
- Let an integer
**Q = N**and**mark**all the proper divisors of**Q**except Q itself in the array. - 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

**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 <bits/stdc++.h> ` `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; ` `} ` |

*chevron_right*

*filter_none*

## 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. ` |

*chevron_right*

*filter_none*

## 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 ` |

*chevron_right*

*filter_none*

## 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. ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP Program to determine ` `// the number of unmarked ` `// integers in a special sieve ` ` ` `function` `countUnmarked(` `$N` `) ` `{ ` ` ` `if` `(` `$N` `% 2 == 0) ` ` ` `return` `$N` `/ 2; ` ` ` `else` ` ` `return` `$N` `/ 2 + 1; ` `} ` ` ` `// Driver Code ` `$N` `= 4; ` `echo` `"Number of unmarked elements: "` `, ` ` ` `countUnmarked(` `$N` `); ` ` ` `// This code is contributed ` `// by anuj_67. ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

Number of unmarked elements: 2

## Recommended Posts:

- Count number of Special Set
- Count the number of special permutations
- Find Largest Special Prime which is less than or equal to a given number
- Smallest Special Prime which is greater than or equal to a given number
- Find a number which give minimum sum when XOR with every number of array of integers
- Find the number of positive integers less than or equal to N that have an odd number of digits
- Find the number of integers x in range (1,N) for which x and x+1 have same number of divisors
- Number of solutions for x < y, where a <= x <= b and c <= y <= d and x, y are integers
- Number of N digit integers with weight W
- Find the number of integers from 1 to n which contains digits 0's and 1's only
- Number expressed as sum of five consecutive integers
- Number of distinct integers obtained by lcm(X, N)/X
- Check if a number can be written as sum of three consecutive integers
- Count ways to express even number ‘n’ as sum of even integers
- Number of ways in which N can be represented as the sum of two positive integers

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.