【循序渐进学Python】使用多种方法实现素数之和

【循序渐进学Python】运用Python实现素数之和

今天我们运用我们所学的知识,写一个案例,进一步对所学知识进行熟悉!

素数之和

需求:

  • 求出1-200之内所有的素数之和素数是指只能被1和自身整除的数

方法一:

思路:
  1. 我们可以先求出1-200之间的所有素数
  2. 然后把所有素数放到列表中进行最后的相加求和
实现:
# 首先定义一个空的列表
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. 利用列表推导式把1-200所有数放到一起
  2. 定义函数判断是否是素数
  3. 利用高阶函数进行过滤,求和得出最终结果
实现:
# 首先我们导入高阶函数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)
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值