Найти - Пользователи
Полная версия: 25 задача Егэ
Начало » Центр помощи » 25 задача Егэ
1
Lee
Задача: Дана последовательнсоть чисел от 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))
Ответ в сборнике(16384, у меня 8128) Не могу понять, где у меня ошибка. Заранее спасибо за помощь
Ocean
 
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)
PEHDOM
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
PS все “совршенные числа” это степени двойки.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB