首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用程序计算100以内质数之和

用程序计算100以内质数之和

作者头像
Crossin先生
发布2026-07-28 11:09:44
发布2026-07-28 11:09:44
90
举报

大家好,欢迎来到 Crossin 的编程教室。

今天给大家出道题。

题目很短:

计算1到100以内所有质数的和

所谓质数,就是除了1和此数自身外,不被其他自然数整除的数。

这是道经典的编程练习题,解法也有很多种。

一种常见的解决思路:

  1. 判断一个数是不是质数,这个不算难
  2. 找出1~100的范围内,所有的质数,这个也很简单
  3. 把找出来的质数加一起,这就更没难度啦

把上面3步合在一起就OK啦!

在往下看示例代码之前,建议大家自己动手写一写。

如果你有兴趣的话,也可以想想其他的解法,并且进一步考虑下你所用方法的算法复杂度是多少。

【参考解答】

常规思路是:

代码语言:javascript
复制
遍历 2~100:
    判断当前数是不是质数
    如果是质数,把值累加到结果上
输出结果

而判断质数的基本方法是:

代码语言:javascript
复制
遍历 2~待判断数:
    判断是否可以被当前数整除
    如果可以整除,则不是质数
如果遍历完毕都没有能整除的,则是质数

不过,这其中有不少可以优化的地方,让程序可以用更少的计算次数就可以得到结果。比如判断一个数N是否质数并不需要遍历 2~N,只需要到 √N 即可。

来自读者 @一个石头 的优化方案:

代码语言:javascript
复制
def primeSum(N=100):  
    initial=[]    
    prime=0    
    node=int(N**0.5)+1    
    for i in range(2,node):       
        if 0 not in [i%pr for pr in initial]:            
            prime+=i            
            initial.append(i)    
    for i in range(node,N):
        if 0 not in [i%pr for pr in initial]:
            prime+=i    
    return prime
print(primeSum())

还有一个比较有意思的解法。这个解法的思路是与常规反着的,并不是判断谁是质数,而是去掉那些不是质数的:

代码语言:javascript
复制
创建 2~100 的列表L
如果列表L里还有值,则继续循环:
    把L[0]的值累加到结果上
    对于列表L中的元素,能被L[0]整除的通通不要,剩下的成为新的L

代码:

代码语言:javascript
复制
def primeSum(N=100):
    initial = list(range(2,N+1))
    prime = 0
    while len(initial) > 0:
        i = initial[0]
        prime += i
        initial = [num for num in initial if num % i != 0]
    return prime
print(primeSum())

结果就是 1060

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档