如何查找每次迭代中获得的最大值以将其追加到列表中

时间:2019-06-27 17:24:25

标签: python list loops

给出一个数字n,编写一个程序以查找从n开始的九个连续数字中每个数字的最大素数之和。

我能够得到这些因子,但是对于每个值,如果有多个质数因子,我只希望那些我无法获得的质数因子中的最大值。

def find_g(num):
    factor=[]
    list1=[]
    list2=[]
    for i in range(0,num-1):
        factor.append(num+i)
    print(factor)
    for f in factor:
        for i in range(2,f+1):
            if(f%i==0 and i%2!=0):
                list1.append(i)
                print(list1)
                list2.append(max(list1))
        list1=[]

    print(list2)

print(find_g(10))

输入:10
所需的输出:[5, 11, 3, 13, 7, 5, 17, 9]
实际输出:[5, 11, 3, 13, 7, 3, 5, 15, 17, 3, 9]

1 个答案:

答案 0 :(得分:0)

您可以将其分解为两部分:(A)找到任何给定数字n的最大素数,以及(B)将{{1 }}。我将描述每种代码,然后将它们组合。

(A)我们可以使用以下代码找到数字nn的最大素数:

lpf(n)

(B)然后,通过跨def lpf(n): i = 2 while i * i <= n: if n % i: i += 1 else: n //= i return n 映射n函数并求和结果,我们可以为从n+9lpf的每个数字运行以下代码:

range(n, n+9)

对于您的def find_g(n): return sum(map(lpf, range(n, n+9))) ,我们得到

n=10

这是正确的,因为[10、11、12、13、14、15、16、17、18、19]的最大素数分别为[5、11、3、13、7、5, 2,17,3]。

(请注意,您的预期答案不正确,您能找出原因吗?)