如何编写一个程序,显示按其最大素数因子排序的数字列表中的值?

问题描述 投票:0回答:2

My list

numbers = [865, 1169, 1208, 1243, 329]

我想按最大素数因子的升序对此列表进行排序

我的意见:

import math
maxPrime = -1
n=numbers   
# Print the number of 2s that divide n 
while n % 2 == 0: 
    maxPrime = 2
    n >>= 1     # equivalent to n /= 2 

    # n must be odd at this point,  
    # thus skip the even numbers and  
    # iterate only for odd integers 
for i in range(3, int(math.sqrt(n)) + 1, 2): 
    while n % i == 0: 
        maxPrime = i 
        n = n / i 

但是,这不是打印n我收到错误

TypeError: unsupported operand type(s) for %: 'list' and 'int'

我想要的输出:

Sorted by largest prime factor:
[290, 1243, 1208, 1169, 865]
python list math prime-factoring
2个回答
3
投票

您的问题位于顶部,错误消息非常简单:

numbers = [865, 1169, 1208, 1243, 329]
n=numbers    # n is now another reference to the list of numbers
while n % 2 == 0:

您不能将模数运算符应用于列表。我怀疑你想要的是什么

for n in numbers:
    while n% 2 == 0:

这应该会让你接下来的错误......程序中有几个错误。为您修复它们是Stack Overflow的主题。看到这个可爱的debug博客寻求帮助。


1
投票

我认为你可以通过列表理解更好地做到这一点。

import numpy as np
numbers = [865, 1169, 1208, 1243, 329]

#create function to be used in list comprehension
def largest_prime_factor(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
    return n

#use list comprehension to get the largest common factor
largest_fact=[largest_prime_factor(x) for x in numbers]

 #sort your numbers by the largest factor
answer=[x for _,x in sorted(zip(largest_fact,numbers))]
print (answer)

Out:
[329, 1243, 1208, 1169, 865]
© www.soinside.com 2019 - 2024. All rights reserved.