Check if a number is Flavius Number

• Last Updated : 31 Jul, 2022

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.

Below is the implementation of the approach:

C++

 `// C++ implementation` `#include ` `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

 ``

Output

```No
```

Time complexity: O(n)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles