簡體   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