Open In App

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

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. 

Time Complexity: O(1)

Examples: 

Input : N = 5 
Output :
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. 
  2. Q = 4 : Mark all the proper divisors of Q. Here 2 gets marked and unmarked elements are {3, 4, 5}. 
  3. Q = 3 : 
  4. 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 :
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} 
  2. Q = 3 
  3. 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 

Implementation:




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




<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

Time complexity: O(1)
Auxiliary space: O(1)


Article Tags :