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:
- Q = 5 : Mark All the proper divisors of Q, here no element is there so every element remains unmarked.
- Q = 4 : Mark all the proper divisors of Q. Here 2 gets marked and unmarked elements are {3, 4, 5}.
- Q = 3 :
- 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:
- Q = 4 Mark all the proper divisors of Q. So here 2 gets marked and unmarked elements are {3, 4}
- Q = 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++
// 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> |
Number of unmarked elements: 2
Time complexity: O(1)
Auxiliary space: O(1)
Please Login to comment...