Форум » Обработка целых чисел » Задание 25 №5307 » Ответить

Задание 25 №5307

Anth0s: (Л. Шастин) Пусть P(N) – сумма всех простых делителей числа N, а E(N) - сумма всех его чётных делителей. Обозначим M(N) = | P(N) – E(N) | (модуль разности). Найдите 5 наименьших чисел, больших 100 000 000, у которых количество простых делителей совпадает с количеством чётных делителей. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им значения M(N). Код, который я сваял: [pre2]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[/pre2] Функции прочекал на небольших числах, вроде работают исправно. Выводит: 100000006 100102329 100000014 116666685 100000022 100485561 100000058 100207767 100000078 102631677 Надо бы получить: 100000034 50000017 100000042 50000021 100000094 50000047 100000118 50000059 100000126 50000063

Ответов - 1

Anth0s: Нашёл ошибку: единица не считается простым числом. Стоило только её исключить, и всё наконец заработало.



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