Форум сайта python.su
Задача: Дана последовательнсоть чисел от 2 до 20000
Найти все почти совршенные числа(т.е те числа у которых разность между самим числом и суммой его делителей равна единице)
в ответ запишите максимальное из них.
Вот мой код:
from math import sqrt for i in range(2,20001): x=[] for j in range(2,int(sqrt(i))): if i%j==0: x.append(j) x.append(i//j) x.sort() if i-sum(x)==1: print(i,sum(x))
Офлайн
for number in range(2, 20000):
divider_sum = 0
for divider in range(1, int(number // 2 + 1)):
if number % divider == 0:
divider_sum += divider
if number - divider_sum == 1:
print(number, divider_sum)
2 1
4 3
8 7
16 15
32 31
64 63
128 127
256 255
512 511
1024 1023
2048 2047
4096 4095
8192 8191
16384 16383
numbers = [] for number in range(2, 20000+1): divider_sum = 0 for divider in range(1, int(number // 2 + 1)): if number % divider == 0: divider_sum += divider if number - divider_sum == 1: numbers.append(number) maximal_number = max(numbers) print(maximal_number)
Отредактировано Ocean (Май 14, 2021 04:17:09)
Офлайн
Lee Потому что вы не учитываете что делитель может быть один. Если i==i//j вы всеравно добавляете его два раза. НУ и плюс непонятно почему 1 считается делителем, а само число нет. Есди добавить в условие что 1 считаем, а само число не считаем то все сходиться:
from math import sqrt for i in range(2,20001): x=[1,] for d in range(2, int(sqrt(i))+1): if i%d==0: x.append(d) if i//d!=d: x.append(i//d) if i-sum(x)==1: print(i,sum(x)) >>> 2 1 4 3 8 7 16 15 32 31 64 63 128 127 256 255 512 511 1024 1023 2048 2047 4096 4095 8192 8191 16384 16383
[code python][/code]
Отредактировано PEHDOM (Май 14, 2021 09:55:20)
Офлайн