[英]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.