首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中打印给定范围内每个数字的素除数和

在python中打印给定范围内每个数字的素除数和
EN

Stack Overflow用户
提问于 2021-05-01 12:33:26
回答 2查看 69关注 0票数 0

这是我的代码,用于打印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的初学者,所以非常感谢您的帮助。

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-01 12:45:00

由于格式化的方式,这几乎是不可能的,但这里的问题是您的"return“语句缩进了太多的一个位置。因此,您在第一个循环结束时返回,而不是在它有机会检查任何其他内容之前。取消缩进return arrayofsum,它应该可以工作。

然后,你在主循环之外初始化arrayofdivisors,所以它变得越来越大。然后,您没有按照规范的要求将0添加到质数列表中。

请注意,Python中的if语句不需要括号,就像在C中一样。

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2021-05-01 12:49:13

尝尝这个

代码语言:javascript
复制
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)  
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67342912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档