Skip to content
Related Articles

Related Articles

Improve Article

Number of unmarked integers in a special sieve

  • Difficulty Level : Medium
  • Last Updated : 26 Apr, 2021

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: 
 

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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

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




<?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.
?>

Javascript




<script>
// javascript 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
     
        var N = 4;
        document.write("Number of unmarked "
        + "elements: " + countUnmarked(N));
 
// This code is contributed by todaysgaurav
</script>
Output: 
Number of unmarked elements: 2

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :