簡體   English   中英

在 python 中打印給定范圍內每個數字的素數之和

[英]Printing the sum of prime divisors of each number in a given range in python

這是我的代碼,用於打印 18 到 25 之間每個數字的素數之和。但它只打印 5。

例如:

18 的質因數為 2、3,因此總和 = 5,

19 是素數,因此因子之和 = 0,

20 的質因數為 2 和 5,因此總和 = 7,

21 的質因數為 3 和 7,因此總和 = 10,

22 的質因數為 2 和 11,因此總和 = 13,

23 是素數。 因此總和 = 0,

24 的質因數為 2 和 3,因此總和 = 5,

25 的質因數為 5,因此總和 = 5

因此,它應該打印 [5,0,7,10,13,0,5,5] 我相信我應該使用 break 語句,但我試過它沒有用。 由於我是 python 的初學者,因此非常感謝任何形式的幫助。

def isPrime(n):
i = 2
while i * i <= n:

# n has a factor, hence not a prime 
  if (n % i == 0):
      return False
    i += 1
      
# we reach here if n has no factors 
# and hence n is a prime number 
return True
  
def summ(l, r):
summ = 0
arrayofdivisors = []
arrayofsum = []

# iterate from lower to upper 
for i in range(l, r + 1) :

    # if i is prime, it has no factors 
    if (isPrime(i)) :
        continue
    for j in range(2, i):

        # check if j is a prime factor of i 
        if (i % j == 0 and isPrime(j)) :
            
            arrayofdivisors.append(j)
            
            if(len(arrayofdivisors)>1):
             ans = sum(arrayofdivisors)
            
             arrayofsum.append(ans)
             
        
    return arrayofsum
    
   
 # Driver code
 if __name__ == "__main__":
 l = 18
 r = 25
 print(summ(l, r))

嘗試這個

def isPrime(n) :
   if (n <= 1) :
     return False
   if (n <= 3) :
      return True

   if (n % 2 == 0 or n % 3 == 0) :
      return False

   i = 5
   while(i * i <= n) :
      if (n % i == 0 or n % (i + 2) == 0) :
        return False
      i = i + 6

   return True


def Sum(N):

  SumOfPrimeDivisors = [0] * (N + 1)
   
  for i in range(2, N + 1) :
   
    if (SumOfPrimeDivisors[i] == 0) :
       
        for j in range(i, N + 1, i) :
           
            SumOfPrimeDivisors[j] += i
           
  return SumOfPrimeDivisors[N]

arr=[]   
for i in range(18,26):
   if isPrime(i):
      arr.append(0)
   else:
      arr.append(Sum(i))
print(arr)  

由於您格式化事物的方式,幾乎不可能說出來,但這里的問題是您的“return”語句縮進了 position 太遠了。 因此,您在第一個循環結束時返回,在它有機會檢查其他任何內容之前。 取消縮進return arrayofsum ,它應該可以工作。

然后,您在主循環之外初始化arrayofdivisors ,所以它只會越來越大。 然后,您沒有按照規范要求將0添加到素數列表中。

請注意,Python 中的if語句不需要括號,就像在 C 中一樣。

def isPrime(n):
    i = 2
    while i * i <= n:

        # n has a factor, hence not a prime 
        if n % i == 0:
            print(n,'not prime')
            return False
        i += 1
          
    # we reach here if n has no factors 
    # and hence n is a prime number 
    print(n,"prime")
    return True
      
def summ(l, r):

# iterate from lower to upper 
    arrayofsum = []
    for i in range(l, r + 1) :
        arrayofdivisors = []

        # if i is prime, it has no factors 
        if isPrime(i):
            arrayofsum.append(0)
            continue
        for j in range(2, i):
            # check if j is a prime factor of i 
            if i % j == 0 and isPrime(j):
                arrayofdivisors.append(j)
                
        arrayofsum.append( sum(arrayofdivisors) )
            
    return arrayofsum
        
       
# Driver code
if __name__ == "__main__":
    l = 18
    r = 25
    print(summ(l, r))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM