Check if a number is Flavius Number
Given a series of integers from 1 to infinity and a number N.
The task is to remove every (i + 1)-th element from the remaining series at every i-th iterations and find that the given number N exists in the series or not.
Flavius Number:
Numbers in the Flavius Sieve are called Flavius Numbers.
Flavius sieve starts with the natural numbers and keep repeating the below step:
At the k-th sieving step, remove every (k+1)-st term of the sequence remaining of N natural numbers after the (k-1)-st sieving step.
For Example: 1, 3, 7, 13, 19, 27, 39, 49,
Examples:
Input: N = 17
Output: N0
Series after i-th iterations
1). 1, 3, 5, 7, 9, 11, 13, 15, 17, …
2). 1, 3, 7, 9, 13, 15, 19, 21, 25, …
3). 1, 3, 7, 13, 15, 19, 25, …
4). 1, 3, 7, 13, 19, 27, ….
Input: N = 3
Output: Yes
Approach:
- If the given number is even so the answer is simply “No”. Because in the first iteration all the even number has been eliminated from the series.
- Repeat this process.
- Else remove the number of elements removed at 1st iteration i.e. (1/2)th the number and then check
if it is divisible by 3 the answer should be “No”, else subtract the numbers before it that were
removed i.e. (1/3)rd the number and so on. - Repeat the above step for all iterations until we get an answer.
- Else remove the number of elements removed at 1st iteration i.e. (1/2)th the number and then check
Below is the implementation of the approach:
C++
// C++ implementation #include <bits/stdc++.h> using namespace std; // Return the number is // Flavious Number or not bool Survives( int n) { int i; // index i starts from 2 because // at 1st iteration every 2nd // element was remove and keep // going for k-th iteration for ( int i = 2;; i++) { if (i > n) return true ; if (n % i == 0) return false ; // removing the elements which are // already removed at kth iteration n -= n / i; } } // Driver Code int main() { int n = 17; if (Survives(n)) cout << "Yes" << endl; else cout << "No" << endl; return 0; } |
Java
// Java implementation of the above approach class GFG { // Return the number is // Flavious Number or not static boolean Survives( int n) { // index i starts from 2 because // at 1st iteration every 2nd // element was remove and keep // going for k-th iteration for ( int i = 2 ;; i++) { if (i > n) return true ; if (n % i == 0 ) return false ; // removing the elements which are // already removed at kth iteration n -= n / i; } } // Driver Code public static void main(String[] args) { int n = 17 ; if (Survives(n)) System.out.println( "Yes" ); else System.out.println( "No" ); } } // This code is contributed by 29AjayKumar |
Python3
# Python3 implementation of # the above approach # Return the number is # Flavious Number or not def Survives(n) : # index i starts from 2 because # at 1st iteration every 2nd # element was remove and keep # going for k-th iteration i = 2 while ( True ) : if (i > n) : return True ; if (n % i = = 0 ) : return False ; # removing the elements which are # already removed at kth iteration n - = n / / i; i + = 1 # Driver Code if __name__ = = "__main__" : n = 17 ; if (Survives(n)) : print ( "Yes" ); else : print ( "No" ); # This code is contributed by AnkitRai01 |
C#
// C# implementation of the above approach using System; class GFG { // Return the number is // Flavious Number or not static bool Survives( int n) { // index i starts from 2 because // at 1st iteration every 2nd // element was remove and keep // going for k-th iteration for ( int i = 2;; i++) { if (i > n) return true ; if (n % i == 0) return false ; // removing the elements which are // already removed at kth iteration n -= n / i; } } // Driver Code public static void Main(String[] args) { int n = 17; if (Survives(n)) Console.WriteLine( "Yes" ); else Console.WriteLine( "No" ); } } // This code is contributed by PrinciRaj1992 |
Javascript
<script> // Javascript implementation // Return the number is // Flavious Number or not function Survives(n) { let i; // index i starts from 2 because // at 1st iteration every 2nd // element was remove and keep // going for k-th iteration for (let i = 2;; i++) { if (i > n) return true ; if (n % i == 0) return false ; // removing the elements which are // already removed at kth iteration n -= parseInt(n / i); } } // Driver Code let n = 17; if (Survives(n)) document.write( "Yes<br>" ); else document.write( "No<br>" ); </script> |
No