给定一系列从1到无穷大的整数和一个数字N 。
任务是在每第i 次迭代时从剩余序列中删除每个(i + 1)-th元素,并找出给定数字N 是否存在于该序列中。
弗拉维乌斯数:
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,
例子:
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
方法:
- 如果给定的数字是偶数,那么答案就是“否”。因为在第一次迭代中,所有偶数都从系列中消除了。
- 重复这个过程。
- 否则删除在第一次迭代时删除的元素数量,即 (1/2)th 数量,然后检查
如果它可以被 3 整除,答案应该是“否”,否则减去它之前的数字
删除即 (1/3)rd 数字等。 - 对所有迭代重复上述步骤,直到我们得到答案。
- 否则删除在第一次迭代时删除的元素数量,即 (1/2)th 数量,然后检查
下面是该方法的实现:
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
No
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。