Форум » Обработка целых чисел » #25 (4120) » Ответить

#25 (4120)

AI82: [pre2] def simpleDividers(n): answer = [] # пустой список d = 2 # начальное значение проверяемого делителя while d * d <= n: # проверяем делители до корня из n if n % d == 0: # если остаток от деления = 0 answer.append(d) # то добавляем в ответ n //= d # делим n на d else: d += 1 # проверяем следующий делитель if n >1 : # если в итоге n > 1 answer.append(n) # добавляем в ответ ещё этот n if n in answer: answer.clear return answer # возвращаем n = 650000 f = 0 k = 0 while k < 4: f = int(sum(simpleDividers(n)) / len(simpleDividers(n))) if f % 37 == 23: k += 1 print (n, f) n += 1[/pre2] Ответ не сходится в последнем числе 650220 2169

Ответов - 1

cabanov.alexey: Программы "заворачивайте" в тэг [ pre2 ]...[ /pre2 ], при этом сохраняются все отступы и применяется моноширинный шрифт. Для 650220 функция возвращает [2, 2, 3, 5, 10837] (что, конечно, неверно) Для функции поиска простых делителей без повторов лучше использовать множество, а не список. [pre2] def simpleDividers(n): answer = set() d = 2 while d * d <= n: if n % d == 0: answer.add(d) n //= d else: d += 1 if n > 1: answer.add(n) return answer [/pre2]



полная версия страницы