Автор | Сообщение |
|
Отправлено: 16.06.22 18:43. Заголовок: Задание 25 №5307
(Л. Шастин) Пусть P(N) – сумма всех простых делителей числа N, а E(N) - сумма всех его чётных делителей. Обозначим M(N) = | P(N) – E(N) | (модуль разности). Найдите 5 наименьших чисел, больших 100 000 000, у которых количество простых делителей совпадает с количеством чётных делителей. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им значения M(N). Код, который я сваял: def prime_check(number): for i in range(2,int(number ** 0.5) + 1): if number % i == 0: return False return True def PE(number): prime_divs = set() even_divs = set() for i in range(1,int(number**0.5) + 1): if number % i == 0: if i % 2 == 0: even_divs.add(i) if prime_check(i): prime_divs.add(i) if (number // i) % 2 == 0: even_divs.add(number // i) if prime_check(number // i): prime_divs.add(number // i) return sum(prime_divs), len(prime_divs), sum(even_divs), len(even_divs) number = 100_000_000 + 1 count = 0 while count < 5: P, prime_count, E, even_count = PE(number) if prime_count == even_count: print(number, abs(P - E)) count += 1 number += 1 Функции прочекал на небольших числах, вроде работают исправно. Выводит: 100000006 100102329 100000014 116666685 100000022 100485561 100000058 100207767 100000078 102631677 Надо бы получить: 100000034 50000017 100000042 50000021 100000094 50000047 100000118 50000059 100000126 50000063
|
|
|
Ответов - 1
[только новые]
|
|
|
Отправлено: 18.06.22 02:04. Заголовок: Нашёл ошибку: единиц..
Нашёл ошибку: единица не считается простым числом. Стоило только её исключить, и всё наконец заработало.
|
|
|