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 answered should be “No”, else subtract the numbers before it that were
      removed i.e. (1/3)rd the number and so on.
    • Repeat above step for all iterations until we get answer.

Below is the implementation of the approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

No


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.