如何返回具有除数最大值的数字?

时间:2016-02-15 10:50:39

标签: python python-3.x

我需要返回具有所有除数的最大值除数的数字。所以,我所尝试的是:

def max_divisors(my_list):
#Takes each number in list
n=my_list
for k in n:
    #calculate how many divisors each number has
    i=2
    count=2
    while(i**2 < k):
        if(k%i==0):
            count+=2
        i+=1
    count+=(1 if i**2==k else 0)
    print(k,"has",count, "divisors")
print(max_divisors([100,5, 6])) 

完美回归 100 has 9 divisors 5 has 2 divisors 6 has 4 divisors. 现在我需要得到最大除数的数量。也就是说,在所有除数中,9是最大的,所以应该打印数字100.我怎么能这样做?请给我任何建议。谢谢。

2 个答案:

答案 0 :(得分:1)

定义max_divsmax_divs_elem变量并将其更新为存储具有最高分隔数的元素,我已将带有 NEW LINES 前缀的注释放到新的代码行中:

def max_divisors(my_list):
    #Takes each number in list
    n=my_list

    # NEW LINES: initialise max_divs and max_divs_elem vars 
    max_divs = 0
    max_divs_elem = 0

    for k in n:
        #calculate how many divisors each number has
        i=2
        count=2
        while(i**2 < k):
            if(k%i==0):
                count+=2
            i+=1
        count+=(1 if i**2==k else 0)
        # update  max_divs and max_divs_elem if needed
        if max_divs < count:
            max_divs = count
            max_divs_elem = k
        print(k,"has",count, "divisors")

    # NEW LINES: print values of max_divs, max_divs_elem
    print(max_divs_elem, "has maximal dividers:", max_divs)
print(max_divisors([100,5, 6])) 

答案 1 :(得分:1)

你的功能太多了。把它分成更小的部分。

有一个单独的功能来获得divisiors:

def count_divisors(number):
    i = 2
    count = 2
    while(i ** 2 < k):
        if(k % i == 0):
            count += 2
        i += 1
    count += (1 if i ** 2 == k else 0)
    return count

然后您的打印和搜索可以分开:

>>> numbers = [100, 5, 6]
>>> divisors = [count_divisors(number) for number in numbers]

>>> for number, divisor_count in zip(numbers, divisors):
...     print("{} has {} divisors".format(number, divisor_count))

您可以使用内置函数max在某些条件下搜索最大值:

>>> max(zip(numbers, divisors), key=itemgetter(1))
(100, 9)