整体思路是通过素数的定义:在大于1的整数中只能被1和它本身整除的数。
那我们便可以用一个循环,遍历其中每个数,假设有数a,让他们都与另一个循环中的每个数(最大到a-1)相除,这时,如果余数都不等于0,那么这个数便是我们要的素数了。
有了这么一个思路,就可以设计我们要的算法了。
使用普通循环遍历
l = []
for i in range(2, 101): #定义需要循环的范围
for j in range(2, i):
if i % j == 0:
break #如果余数等于0,则说明不是素数,跳出整个循环
else:
l.append(i) #把得到的素数放在list中
print(l)
print(sum(l))
这里用到 for else 循环,除非循环非正常退出,否则执行else
使用filter,lambda
import math
def getPrime():
return list(filter(lambda x: not [x % i for i in range(2, int(math.sqrt(x)) + 1) if x % i == 0], range(2, 101)))
#filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回
print(getPrime())
print(sum(getPrime()))
这里如果返回filter需要用list()。
Construct an iterator from those elements of iterable for which function returns true.
使用函数
def num(n):
for i in range(2, n):
if n % i == 0:
break
else:
return n
results = map(num, range(2, 101))
l=[i for i in results if i]
print(l)
print(sum(l))