【问题标题】:How to find number in list which has the biggest number of prime?如何在列表中找到素数最多的数字?
【发布时间】:2019-05-26 06:10:38
【问题描述】:

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

我编写的代码执行了除最终条件之外的所有条件。 我应该如何为两个数字具有相同数量的素因子的情况编写代码(当我希望更大的数字成为我的输出时)? 例如,67884 都具有 3 素因子。我的代码输出为84,而我希望输出为678(更大的数字)。

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

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)))

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    当您将具有最多素因数的数字附加到列表n 时,您将它们存储为字符串而不是整数。因此,当您对包含 84,678 和 231 的 n 执行 max() 函数时,将返回 84。我建议您在存储到n 时使用int() 转换数字,然后对其执行max() 函数。只需调整您的代码如下:

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

    【讨论】:

      【解决方案2】:

      你的代码很麻烦 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        相关资源
        最近更新 更多