这是我的代码,用于打印18到25之间的每个数字的素数因子和。但它只打印了5个。
例如:
18有质数因子2,3,因此sum = 5,
19是质数,因此因子和= 0,
20有质数因子2和5,因此sum = 7,
21有质数因子3和7,因此sum = 10,
22有质数因子2和11,因此sum = 13,
23是质数。因此sum = 0,
24有质数因子2和3,因此sum = 5,
25的素因数为5,因此sum =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))发布于 2021-05-01 12:45:00
由于格式化的方式,这几乎是不可能的,但这里的问题是您的"return“语句缩进了太多的一个位置。因此,您在第一个循环结束时返回,而不是在它有机会检查任何其他内容之前。取消缩进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))发布于 2021-05-01 12:49:13
尝尝这个
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) https://stackoverflow.com/questions/67342912
复制相似问题