Python

Задача на Python.

2) Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей четное число.
Можно заметить, что чётные делители не влияют на чётность их суммы. Из этого следует, что, во-первых, достаточно проверить нечётные числа от 1 до 199, и для чисел, удовлетворяющих условию, также внести в результат их произведения на все степени двойки. Во-вторых, проверка делимости на чётные делители тоже не нужна. А в-третьих, суммы самих нечётных делителей считать не нужно, когда их количество имеет ту же чётность.
И конечно, есть более быстрые способы факторизации, чем перебор всех чисел от 1 до делимого.
 from itertools import takewhile

def evensf(n):
fs, p = {1}, 3
while p * p 1:
fs.update([f * n for f in fs])
return len(fs) % 2 == 0

N = 200

def scale(n):
return list(takewhile(N.__ge__, (n
Василий Буянов
Василий Буянов
87 571
Лучший ответ
Если имеется сумма всех делителей, то задача абсурдна. Только для натуральных делителей будет так:
 from math import sqrt 
def sum_of_divisors(n):
m, s = int(sqrt(n)), 0
for i in range(1, m + 1):
if n % i == 0: s += i + n // i
if m**2 == n: s -= m
return s
for n in range(1, 201):
s = sum_of_divisors(n)
if ~ s & 1: print("%3d%6d" % (n, s))
С подгонкой под экран достаточной ширины:
 from math import sqrt 
def sum_of_divisors(n):
m, s = int(sqrt(n)), 0
for i in range(1, m + 1):
if n % i == 0: s += i + n // i
if m**2 == n: s -= m
return s
for n in range(1, 201):
m, s = 0, sum_of_divisors(n)
if ~s & 1:
m += 1; print("%4d (%3d)" % (n, s), end = "")
if m == 10: m = 0; print()
Oleg Ledyev
Oleg Ledyev
29 440
Oleg Ledyev *Если имеется в виду
 print(', '.join(map(str, [x for x in [x for x in range(1, 200)] if sum([i for i in range(1, x + 1) if x % i == 0]) % 2 == 0])))