假设我们有一个数字n。我们必须检查n是否为Euclid数。众所周知,欧几里德数是整数,可以表示为
n = P n +1
哪里是前n个素数的乘积。
因此,如果输入像n = 211,那么输出将为True n可以表示为
211 =(2×3×5×7)+1
为了解决这个问题,我们将遵循以下步骤-
最大:= 10000
素数:=一个新列表
定义功能 generate_all_primes()。这将需要
素数:=大小为MAX并填充True的列表
x:= 2
当x * x <MAX时
对于范围在x * 2到MAX的i,每步更新x,执行
x:= x + 1
prime [i]:= False
如果prime [x]为True,则
对于2到MAX-1,范围内的x
在素数末尾插入x
如果prime [x]为true,则
从主要方法执行以下操作:
generate_all_primes()
mul:= 1,i:= 0
当mul <n时,
返回True
mul:= mul *质数[i]
如果mul + 1与n相同,则
我:=我+ 1
返回False
让我们看下面的实现以更好地理解-
MAX = 10000 primes = [] def generate_all_primes(): prime = [True] * MAX x = 2 while x * x < MAX : if prime[x] == True: for i in range(x * 2, MAX, x): prime[i] = False x += 1 for x in range(2, MAX): if prime[x]: primes.append(x)def solve(n): generate_all_primes() mul = 1 i = 0 while mul < n : mul = mul * primes[i] if mul + 1 == n: return True i += 1 return False n = 211 print(solve(n))
211输出结果
True