繁体   English   中英

我试图找到某个数字以下的所有素数的总和。 如果初始数是素数,我们返回它

[英]I am trying to find the sum of all the prime numbers below a certain number. if the initial number is prime we return it

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))

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

Meaby 它会帮助你

# 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")

我发现这个解决方案类似于你的: 添加素数看起来很有效

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

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+

核实:-

ending_range = int(input("Find sum of prime numbers upto : "))
total = 0
for num in range(2, ending_range + 1):    
    i = 2        
    for i in range(2, num):
        if (int(num % i) == 0):
            i = num
            break;

    #If the number is prime then add it.
    if i is not num:
        total += num

print("\nSum of all prime numbers till", ending_range, ":", total)

这似乎有效。 如果您希望它添加 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

您可以使用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)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM