【循序渐进学Python】运用Python实现素数之和
今天我们运用我们所学的知识,写一个案例,进一步对所学知识进行熟悉!
素数之和
需求:
- 求出1-200之内所有的素数之和(素数是指只能被1和自身整除的数)
方法一:
思路:
- 我们可以先求出1-200之间的所有素数
- 然后把所有素数放到列表中进行最后的相加求和
实现:
# 首先定义一个空的列表
num = []
# 然后for循环遍历1-200之间的所有数
for i in range(1, 201):
# 然后再用for循环遍历2到i之间的所有数
# 因为1肯定可以被任何数整除,所以我们从2开始
# 然后range方法是左开右闭所以我们选择2到i,但是不包括i
# 把比i小的数都除一遍
for temp in range(2, i):
# 然后用if进行判断
# 当i除于temp取余等于0的话
if i % temp == 0:
# 那么说明,在2到i之间还有数可以被整除,则不是素数了,跳出循环
break
else:
# 反之,则把i添加到上面我们定义好的空列表中去
num.append(i)
print(num)
# 对列表输出进行查看
# 定义一个变量让它等于0
ret = 0
# for循环遍历列表
for i in num:
# 进行相加
ret += i
# 最后输出列表相加的和值
print(ret)
方法二:
思路:
- 利用列表推导式把1-200所有数放到一起
- 定义函数判断是否是素数
- 利用高阶函数进行过滤,求和得出最终结果
实现:
# 首先我们导入高阶函数reduce需要的包
import functools
# 然后利用列表推导式把1-200的所有数放到一个列表中
num = [i for i in range(1, 201)]
# 定义一个函数
def fun(x):
# for循环遍历2到x之间的数
# x 代表高阶函数中传入函数的序列
for temp in range(2, x):
# 利用if 进行判断
# 如果取余等于0的话
# 那么该数就不是素数
if x % temp == 0:
# 返回一个 False
return False
else:
# 反之,返回一个 True
return True
# 利用高阶函数filter进行过滤,过滤掉不是素数的数
ret = filter(fun, num)
# 然后利用匿名函数和高阶函数reduce进行累计求和
res = functools.reduce(lambda x, y: x + y, list(ret))
# 得出最后的结果
print(res)