如何在列表中找到质数最大的数字?

时间:2019-05-26 06:10:39

标签: python-3.x

我想编写一个程序,该程序接收10个条目,最后应在输出中打印出质数最大的数字及其质数。而且,如果某些输入具有相同的条件,则程序将输出最大的输入。

我编写的代码执行了除最终条件以外的所有条件。 当两个数字具有相同的素数数时(当我希望更大的数字作为输出时),我应该如何编写代码? 例如843都具有84个素因。我的代码输出为678,而我希望输出为a = [0,0,0,0,0,0,0,0,0,0] #a = [123,43,54,12,76,84,98,678,543,231] b = [0,0,0,0,0,0,0,0,0,0] def is_first (number): Prime_number= 0 for m in range(1, (number //2)+1, 1): if number % m == 0: Prime_number += 1 if Prime_number > 1: is_prime = 0 else: is_prime = 1 return is_prime for i in range(0,10,1): a[i] = input() for j in a: numbers= 0 for k in range(2, int(j)//2, 1): if int(j) % k == 0: if is_first (k) == 1: numbers += 1 b[a.index(j)] = numbers index_of_same = [i for i, e in enumerate(b) if e == max(b)] n = [] for t in index_of_same: n.append(a[t]) print(str(max(n))+ ' ' + str(max(b))) (更大的数字)。

  

输入:   123   43   54   12   76   84   98   678   543   231
  正确的输出:   678 3
  但我的输出:   84 3

{{1}}

2 个答案:

答案 0 :(得分:1)

将素数最高的数字添加到列表n时,会将它们存储为字符串而不是整数。因此,当您对max()执行n函数时,该函数保存84,678和231,则返回84。我建议您在存储到int()时使用n转换数字,然后对其执行max()功能。只需如下调整代码即可:

for t in index_of_same:
    n.append(int(a[t]))

答案 1 :(得分:0)

您的代码很麻烦,因为IMO,所以我想建议一个更简单的版本:

def getNumOfFactors(n):
    num = 0
    factor = 1
    while n > 1:
        factor += 1
        if n % factor == 0:
            num += 1
            n /= factor
            while n % factor == 0:
                n /= factor
    return num

def getMaxValue(values):
    factors = [getNumOfFactors(n) for n in values]
    tuples = zip(factors,values)
    sorted_tuples = sorted([tuple for tuple in tuples],key=lambda x: x[0])
    max_tuples = [tuple for tuple in sorted_tuples if tuple[0] == sorted_tuples[-1][0]]
    sorted_max_tuples = sorted([tuple for tuple in max_tuples],key=lambda x: x[1])
    return sorted_max_tuples[-1]

maxValue = getMaxValue([123,43,54,12,76,84,98,678,543,231])
print(maxValue)