0
def sumPrimes(num):
    sum = 0
    if num>1:
        for i in range(1, num):
            if num % i == 0:
                pass
            else: sum = sum + i
    return sum 

print(sumPrimes(3))

我不知道为什么这不起作用请帮忙。我试图找到低于某个数字的所有素数的总和。如果初始数字是素数,我们返回它。

4

4 回答 4

0

米比它会帮助你

# Program to check if a number is prime or not

num = 407

# To take input from the user
#num = int(input("Enter a number: "))

# prime numbers are greater than 1
if num > 1:
   # check for factors
   for i in range(2,num):
       if (num % i) == 0:
           print(num,"is not a prime number")
           print(i,"times",num//i,"is",num)
           break
   else:
       print(num,"is a prime number")
       
# if input number is less than
# or equal to 1, it is not prime
else:
   print(num,"is not a prime number")
于 2021-11-14T08:24:10.543 回答
0

如果你想有效地做到这一点,它比你想象的要复杂得多。

def genprime():
    yield 2
    D = {4:[2]}
    q = 3
    while True:
        if q not in D:
            yield q
            D[q * q] = [q]
        else:
            for p in D[q]:
                D.setdefault(p + q, []).append(p)
            del D[q]
        q += 2



def isprime(n):
    if isinstance(n, int) and n >= 2:
        g = genprime()
        s = int(n ** 0.5)
        while True:
            d = next(g)
            if d > s:
                return True
            if n % d == 0:
                break
    return False

def sumPrimes(n):
    if isprime(n):
        return n
    g = genprime()
    sum = 0
    while (np := next(g)) < n:
        sum += np
    return sum

print(sumPrimes(12))

为此,您需要 Python 3.7+

于 2021-11-14T08:31:46.083 回答
0

这似乎有效。如果您希望它添加 1 作为素数,请将第二个范围更改为包括 1。


def sumPrimes(num):
    sum = 0
    if num > 1:
       if all(num % n for n in range(2, num)) == True: #check of prime
           return num
       else:
           for i in range(2, num):
               if all(i % n for n in range(2, i)) == True: #if you want it to add the number 1 as a prime number change this range to range(1,i)
                   sum += i
               else:
                   continue
           return sum

于 2021-11-14T08:34:48.970 回答
0

您可以使用is_prime来检查循环中的数字是否为素数:

import math
def is_prime(x):
    for num in range(2, int(math.sqrt(x)) + 1):
        if x % num == 0:
            return False
    return True

def sumPrimes(num):
    return sum([x for x in range(2,num) if is_prime(x)])
于 2021-11-14T08:35:35.237 回答