任何人都可以告诉我为什么这个高复合数字查找器工作?

时间:2017-03-09 18:40:09

标签: python-3.x

以下是什么问题?

divisor = 1 
divisors_d = 0
divisors_max = 0 
divisors = []
divisors_number = []
start = int(input("Number:")) 

for n in range(1,start+1): 

if n % divisor == 0:
    divisors.append(divisor)
    divisor=divisor+1
    divisors_d=divisors_d+1
    if divisors_max<divisors_d:
        c = n
        divisors_number = divisors
        del(divisors[:])
        divisors_max = divisors_d 
        divisors_d = 0

elif n%divisor != 0:
    divisor = divisor + 1

print("The number is: " + str(c))
print("Number of divisors is " + str(divisors_max))
print("The divisors are :" + str(divisors_number))

我试图解决这个问题已经有一段时间了,我无法让它发挥作用,有人可以告诉我它有什么问题吗?

1 个答案:

答案 0 :(得分:0)

在您的代码中,您的缩进不是很好,算法存在一些问题,而且效率并不高。一个好方法是:

number=int(input("Enter a number: ")) 
num=0 
maxnum=0
maxx=0
div=[]
maxdiv=[]
for i in range(1,number+1):
    for x in range(1,i+1):
        if i % x == 0:
            num+=1
            div.append(x)
    if num>maxnum:
        maxnum=num
        maxx=i
        maxdiv=div
    num=0
    div=[]

print("The number is "+str(maxx))
print("Its divisor count is "+str(len(maxdiv)))
print("Its divisors are "+str(maxdiv))

说明:

number = the limit number 
num = used for counting divisors
maxnum = the maximum number of divisors

始终可以使用len(maxdiv)

访问最高数量的除数

请注意,我没有创建另一个变量来存储数字的最大除数,而是使用len(maxdiv)来清理代码。

希望它有所帮助!