我想编写一个程序,该程序接收10个条目,最后应在输出中打印出质数最大的数字及其质数。而且,如果某些输入具有相同的条件,则程序将输出最大的输入。
我编写的代码执行了除最终条件以外的所有条件。
当两个数字具有相同的素数数时(当我希望更大的数字作为输出时),我应该如何编写代码?
例如84
和3
都具有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}}
答案 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)