首页
学习
活动
专区
圈层
工具
发布

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

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

今天给大家出道题。

题目很短:

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

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

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

一种常见的解决思路:

判断一个数是不是质数,这个不算难

找出1~100的范围内,所有的质数,这个也很简单

把找出来的质数加一起,这就更没难度啦

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

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

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

【参考解答】

常规思路是:

遍历 2~100:   判断当前数是不是质数   如果是质数,把值累加到结果上输出结果

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

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

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

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

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 primeprint(primeSum())

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

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

代码:

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 primeprint(primeSum())

结果就是 1060

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

购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。

Crossin的其他书籍:

感谢转发点赞的各位~

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OSZ83SEHez4KWYlR2PtD7kVA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券