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]
您的问题位于顶部,错误消息非常简单:
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博客寻求帮助。
我认为你可以通过列表理解更好地做到这一点。
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]