Skip to main content
 首页 » 编程设计

python 质数和

2025年05月04日13pander-it

我正在尝试制作一个 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