gpt4 book ai didi

python 质数和

转载 作者:太空宇宙 更新时间:2023-11-04 07:09:51 25 4
gpt4 key购买 nike

我正在尝试制作一个 python 程序来生成一个数的素数之和,但该程序没有给出正确的结果,请告诉我原因。

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

我让它成功地生成了一个素数列表,但是我无法添加素数。

这是我用来生成素数列表的代码。

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 变量在外循环的每次迭代中都会被重置。将初始化移出该循环。

此外,a == 2 检查应该只在外循环的每次迭代中发生一次。将其移出内循环。

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

当我们这样做的时候,让我们尝试清理代码以使其更易于理解。您可以将内部循环移到它自己的函数中,这样读者可以更清楚地了解它的用途:

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

使用变量名来描述它们所代表的内容也很有用:

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 循环更惯用:

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

如果你觉得大胆,你可以使用列表理解来减少你使用的循环数量:

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 质数和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17222659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com