很简单。欧拉筛法就是用于处理素数的问题。
先放上一般的代码。(最近在学Python)
def IsPrime(num):
if(num % 2 == 0):
return False
else:
for i in range (2,int(num ** 0.5)):
if(num % i == 0):
return False
return True
return
用这个函数应该可以处理一般的素数问题了。但是——
它不够快。
所以,欧拉筛出来了。
N = int(input("请输入一个大于2的整数:"))
result = list()
isPrime = [True for _ in range(N)]
for i in range(2, N):
if isPrime[i]:
result.append(i)
for e in result:
if e * i >= N:
break
isPrime[e * i] = False
if i % e == 0:
break
print(result)
(此代码可用于处理产生输入的N与2之内的素数)
首先,欧拉筛的主要思想就是首先生成一个列表。然后认定2是素数,然后2的倍数就不是素数了,把isPrime改成False,接着处理3,3 * 2 不是素数, 3 * 3 不是素数。至于i % e == 0就退出,我的理解是为了让程序更快,举个例子的话就是。如果此时i = 6,e从2开始取,先 6 * 2 = 12 非素数,然后 6 * 3 = 18 非素数。这时,我不用继续乘了,6 * 4 可以交给当i = 18,e = 2 时处理。最后再把所有的IsPrime为True的数添加到result.最后打印。