как найти максимум значений, полученных в каждой итерации, чтобы добавить его в список - PullRequest
1 голос
/ 27 июня 2019

Учитывая число 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 голосов
/ 27 июня 2019

Вы можете разбить это на две части: (A) найти наибольший простой множитель для любого заданного числа n и (B) суммировать наибольшие простые множители каждого из девяти последовательных чисел, начиная с n. Я опишу код для каждого, а затем объединю их.

(A) Мы можем найти наибольший простой множитель для числа n, lpf(n), с кодом ниже:

def lpf(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
    return n

(B) Затем мы можем запустить этот код для каждого числа от n до n+9, сопоставив функцию lpf с range(n, n+9) и суммировав результат:

def find_g(n):
    return sum(map(lpf, range(n, n+9)))

Для вашего случая n=10 мы получим

find_g(10) = 66

Это правильно, потому что наибольшие простые множители для [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] составляют, соответственно, [5, 11, 3, 13, 7, 5, 2, 17, 3].

(Обратите внимание, что ваш ожидаемый ответ неверен, вы можете понять, почему?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...