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 iteration and find whether 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 numbers 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++ 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 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 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# 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 |
<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
Time complexity: O(n)
Auxiliary Space: O(1)