如何在我的程序中获得除数之和?

问题描述 投票:0回答:7

在我的程序中,它应该要求用户输入一个数字,然后显示所有可能的除数,但最后,它必须显示所有除数的总和。我在最后一部分遇到问题,希望得到一些帮助。

我的代码:

    prompt = int(input("Enter an interger: "))

print("The divisors of the integer you entered are: ")
for i in range(1, prompt+1):
    if(prompt%i==0):
        print(i)
        print(f")

例如,如果用户输入 20:

The divisors of the integer you entered are:

1

2

4

5

10

20

The sum of the divisors is: 42
python
7个回答
4
投票

只需对代码进行简单的修改即可达到目的。喜欢:

prompt = int(input("Enter an interger: "))

print("The divisors of the integer you entered are: ")
divisor_sum = 0 #updated line
for i in range(1, prompt+1):
    if(prompt%i==0):
        print(i)
        divisor_sum+=i #calculate sum of all divisors

print("The sum of divisors " + str(divisor_sum)) #print the sum of divisors

您还可以使用

list comprehension
使您的程序更短、更智能,例如:

prompt = int(input("Enter an interger: "))

divisors = [i for i in range(1,prompt+1) if prompt%i==0]
divisor_sum = sum(divisors)

print("The divisors of the integer you entered are: ")
for i in divisors:
    print(i)

print("The sum of divisors " + str(divisor_sum))

3
投票

您只需要一个变量来存储总和。我用过

s
。除了
print(f")
之外,其余所有代码都完全没问题。它未使用,并且由于不完整而给出语法错误
"
。而且,
f
没有定义

prompt = int(input("Enter an interger: "))
s=0
print("The divisors of the integer you entered are: ")

for i in range(1, prompt+1):
    if(prompt%i==0):
        s += i
        print(i)
print ("The sum of the divisors is: %d" %s)

输出

Enter an interger: 20
The divisors of the integer you entered are: 
1
2
4
5
10
20
The sum of the divisors is: 42

1
投票

另一种方法是将有效除数列表存储在某种容器中。在这种情况下,适当的“容器”是一个列表。 这样做的好处是您可以存储除数以供以后使用。

prompt = int(input("Enter an interger: "))
divisors = []
print("The divisors of the integer you entered are: ")

for i in range(1, prompt+1):
    if(prompt%i==0):
        print(i)
        divisors.append(i)

print("The sum of divisors " + sum(divisors)) #print the sum of divisors
# max(divisors)
# min(divisors)
# etc...

1
投票

嗯,这个问题让我想起了我在 Euler 项目中解决的一个问题,并且我以 O(sqrt(n)) 复杂度完成了它。

如果你考虑9,

我们不需要考虑到 9 即可得到所有因子。我们只需要考虑到3,如果我们有X作为除数,那么prompt/X也是一个除数。有了这个属性,你可以使算法更加高效

import time
from math import sqrt
prompt = int(input("Enter an interger: "))
start =time.time()
print("The divisors of the integer you entered are: ")

sumofdivisors=0 
for divisor in range(1, int(sqrt(prompt))+1):
    if(prompt%divisor==0):
        sumofdivisors+=divisor
        sumofdivisors+=(prompt/divisor)
        if (divisor==prompt/divisor):
            sumofdivisors-=divisor
            print(divisor)
        else:
            print(divisor)
            print(prompt/divisor)
print("sum is",sumofdivisors)
end=time.time()
print("time taken is",end-start)

输出

Enter an interger: 8
The divisors of the integer you entered are: 
1
8.0
2
4.0
sum is 15.0
time took =  0.0002665519714355469

1
投票
prompt = int(input("Enter an interger: "))

print("The divisors of the integer you entered are: ")
total= 0
for i in range(1, prompt+1):
    if(prompt%i==0):
        print(i)
        total+= i

print("The sum of the divisors is:{}".format(total))

输出:

Enter an interger: 20
The divisors of the integer you entered are: 
1
2
4
5
10
20
The sum of the divisors is:42

0
投票

从数学上来说,当你对一个数字的除数求和时,你不包括所讨论的数字。通常不需要添加范围函数的+1,并且会产生不正确的结果。 以下关于友好配对的维基百科文章可以作为参考。

https://en.wikipedia.org/wiki/Amicable_numbers


0
投票

看看这个更简单的版本。

x = eval(input("Enter a number: "))
s = 0
for i in range(1, x):
    if x % i == 0:
        s += i
        
print(s)
© www.soinside.com 2019 - 2024. All rights reserved.