python sum of primes(python素数之和)
问题描述
我想做一个python程序来生成一个数的质数之和,但是程序没有给出正确的结果,请告诉我为什么.
I am tying to make a python program that will generate the sum of primes for a number, but the program is not giving the correct result,please tell me why.
b=1
#generates a list of numbers.
while b<100:
b=b+1
x = 0.0
a = 0
d = 0
#generates a list of numbers less than b.
while x<b:
x=x+1
#this will check for divisors.
if (b/x)-int(b/x) == 0.0:
a=a+1
if a==2:
#if it finds a prime it will add it.
d=d+b
print d
我让它成功生成了一个素数列表,但我无法添加素数.
I made it generate a list of primes successfully, but i could not get the primes to add.
这是我用来生成素数列表的代码.
This is the code that i used to generate a list of primes.
b=1
while b<1000:
b=b+1
n = b
x = 0.0
a = 0
while x<n:
x=x+1
if (n/x)-int(n/x) == 0.0:
a=a+1
if a==2:
print b
推荐答案
您的 d
变量在您的外部循环的每次迭代中被重置.将初始化移出该循环.
Your d
variable is being reset during each iteration of your outer loop. Move the initialization out of that loop.
此外,a == 2
检查应该只在外循环的每次迭代中发生一次.将其移出内循环.
Additionally, the a == 2
check should only occur once per iteration of the outer loop. Move it out of the inner loop.
b=1
d = 0
#generates a list of numbers.
while b<100:
b=b+1
x = 0.0
a = 0
#generates a list of numbers less than b.
while x<b:
x=x+1
#this will check for divisors.
if (b/x)-int(b/x) == 0.0:
a=a+1
if a==2:
#if it finds a prime it will add it.
d=d+b
print d
结果:
1060
在我们处理它的同时,让我们尝试清理代码以使其更易于理解.您可以将内部循环移动到自己的函数中,以便读者更清楚地了解其用途:
While we're at it, let's try cleaning up the code so it's more comprehensible. You can move the inner loop into its own function, so readers can more clearly understand its purpose:
def is_prime(b):
x = 0.0
a = 0
while x<b:
x=x+1
#this will check for divisors.
if (b/x)-int(b/x) == 0.0:
a=a+1
if a==2:
return True
else:
return False
b=1
d=0
#generates a list of numbers.
while b<100:
b=b+1
if is_prime(b):
d=d+b
print d
使用描述它们所代表的变量名称也很有用:
It's also useful to use variable names that describe what they represent:
def is_prime(number):
candidate_factor = 0
amount_of_factors = 0
while candidate_factor<number:
#A += B is equivalent to A = A + B
candidate_factor += 1
#A little easier way of testing whether one number divides another evenly
if number % candidate_factor == 0:
amount_of_factors += 1
if amount_of_factors == 2:
return True
else:
return False
number=1
prime_total=0
#generates a list of numbers.
while number<100:
number += 1
if is_prime(number):
prime_total += number
print prime_total
for
循环比增加计数器的 while
循环更符合规范:
for
loops are more idomatic than while
loops that increment a counter:
def is_prime(number):
amount_of_factors = 0
for candidate_factor in range(1, number+1):
if number % candidate_factor == 0:
amount_of_factors += 1
if amount_of_factors == 2:
return True
else:
return False
prime_total=0
#generates a list of numbers.
for number in range(2, 101):
if is_prime(number):
prime_total += number
print prime_total
如果您觉得大胆,可以使用列表推导来减少您使用的循环数量:
If you're feeling bold, you can use list comprehensions to cut down on the number of loops you use:
def is_prime(number):
factors = [candidate_factor for candidate_factor in range(1, number+1) if number % candidate_factor == 0]
return len(factors) == 2
#generates a list of numbers.
primes = [number for number in range(2, 101) if is_prime(number)]
prime_total = sum(primes)
print prime_total
这篇关于python素数之和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:python素数之和


基础教程推荐
- 求两个直方图的卷积 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 包装空间模型 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01