新手求助:如何用Python计算指定范围内的质数之和?代码结果异常
你的代码其实是正确的!
首先纠正一个小误解:到50的质数之和本来就是328,你说的326是错误结果——问题出在你对质数的计算或定义理解上,不是代码的问题。
为什么代码逻辑没问题?
质数的定义是:大于1的自然数,除了1和它本身之外没有其他因数。2是唯一的偶质数,完全符合这个定义,必须被计入总和。
你的代码逻辑是对的:
- 外层循环从2开始遍历到50的每个数
- 内层循环检查当前数能不能被2到它自身减1的数整除,要是能整除就跳出循环(说明不是质数)
- 要是内层循环从头到尾没找到能整除的数(没触发
break),就执行else分支,把这个质数加到总和里
当num=2时,内层循环range(2,2)是空的,循环直接结束,所以会执行else分支把2加进去——这完全正确,因为2是质数。
手动验证总和
把50以内的所有质数列出来相加:
2+3+5+7+11+13+17+19+23+29+31+37+41+43+47 = 328
如果你确实要得到326(不推荐,不符合质数定义)
要是你误把2排除在质数外,想得到326,可以修改外层循环从3开始,只遍历奇数:
upto = int(input("Find sum of prime numbers upto : ")) sum = 0 # 从3开始,步长为2,只遍历奇数 for num in range(3, upto + 1, 2): for i in range(2, num): if (num % i == 0): break else: sum += num print("Sum of all prime numbers upto", upto, ":", sum)
输入50的话,这个代码会输出326,但这是错误的质数和,因为漏掉了合法质数2。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

