Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 26.04.2020
Сообщений: 9

Пользователь вводит натуральное число N, найти все совершенные числа меньше N

17.12.2021, 16:47. Показов 4578. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пользователь вводит натуральное число N, найти все совершенные числа меньше N.
примечание: совершенное число — натуральное число, равное сумме его положительных делителей, не считая самого числа.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.12.2021, 16:47
Ответы с готовыми решениями:

Найти все совершенные числа, меньшие n (n – натуральное число)
Найти все совершенные числа, меньшие n (n – натуральное число). Число – совершенное, если оно равно сумме всех своих делителей, за ...

1. Пользователь вводит натуральное число. Найти сумму четных цифр этого числа цифру. Использовать процедуры или функции. 2. Пользователь вводит н
1. Пользователь вводит натуральное число. Найти сумму четных цифр этого числа цифру. Использовать процедуры или функции. 2. ...

Напишите программу, которая вводит натуральное число N и находит все совершенные числа в диапазоне от 1 до N
Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 6=1+2+3). Напишите программу, которая...

13
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
14.01.2022, 14:52
В решении используем алгоритм основанный на известном из теории чисел утверждении Ферма о том, что если натуральное число p=2k+1-1 простое, то число n=p2k— совершенное (k=1, 2, 3, ...).

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#Проверка является ли число простым
def is_prime_number(p):
    i = 2
    while (i < p//2):
        if (p % i == 0):
            return False
        i += 1
    return True
 
#Ввод натурального числа 
n = -1
while n < 1:
    n = int(input())
    break
 
#Если совершенных чисел нет, программа выводит число 0. 
if n < 6:
    print (0)
else:
    #Нахождение всех совершенных чисел меньше либо равных n.
    p = 1
    k = 1
    while (p * 2 ** k <= n):
        p = 2 ** (k + 1) - 1
        if (is_prime_number(p)):
            print (p * 2 ** k, end = " ")
        k += 1
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
14.01.2022, 18:16
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def f(n):
    res = 2
    for i in range(n-2):
        res *= 2
    res = res * ( res*2 - 1 )
    return res
#==============================================================================
def print_all_perfect_numbers_less_than(n):
    p = [2,3,5, 7,13,17, 19,31,61, 89,107,127, 521,607,1279, 2203,2281,3217, 4253,4423,9689, 9941,11213]
    for i in range( len(p) ):
        k = f( p[i] )
        if k < n:
            print(k)
        else:
            return
#==============================================================================
while True:
    print()
    n = int( input('n = ') )
    print_all_perfect_numbers_less_than(n)
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
15.01.2022, 01:48
Еще вариант, где можно вводить число с плавающей точкой, т.е. в формате 1e100, 1e1000 и т. д:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def f(n):
    res = 1
    for i in range(n-1):
        res *= 2
    res = res * ( res*2 - 1 )
    return res
#==============================================================================
def print_all_perfect_numbers_less_than(n):
    p = [2,3,5, 7,13,17, 19,31,61, 89,107,127, 521,607,1279, 2203,2281,3217, 4253,4423,9689, 9941,11213]
    for i in range( len(p) ):
        k = f( p[i] )
        if k < n:
            print( i+1, ')\t', k, sep='' )
        else:
            return
#==============================================================================
while True:
    print()
    n = float( input('n = ') )
    print_all_perfect_numbers_less_than(n)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
15.01.2022, 08:58
Простенькое решение:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def sum_all_div(n):
    s=1
    i=2
    while(i*i<=n):
        if n%i==0:
            s=s+i
            k=n//i
            if k != i:
                s=s+k
        i=i+1
    return s
    
def print_perf(a,b):
    for x in range(a,b+1):
        if sum_all_div(x)==x:
            print(x)
            
print_perf(2,20000)
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
17.01.2022, 11:48
Задача не решена.
Задача. Совершенные числа
Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 6=1+2+3). Напишите программу, которая вводит натуральное число N и находит все совершенные числа в диапазоне от 1 до N .

Входные данные
Входная строка содержит натуральное число N .

Выходные данные
Программа должна вывести в одну строку через пробелы все совершенные числа в диапазоне от 1 до N . Если таких чисел нет, программа должна вывести число 0.

Примеры
Входные данные
30

Выходные данные
6 28

Входные данные
5

Выходные данные
0

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def perfect_numbers(number):
    answer = 2
    for i in range(number-2):
        answer *= 2
    answer = answer * ( answer*2 - 1 )
    return answer
 
def print_all_perfect_numbers_less_than(number):
    prime_numbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
                     31, 37, 41, 43, 47, 53, 59, 61, 67,
                     71, 73, 79, 83, 89, 97, 101, 103, 107,
                     109, 113, 127, 131, 137, 139, 149, 151,
                     157, 163, 167, 173, 179, 181, 191, 193,
                     197, 199, 211, 223, 227, 229, 233, 239]
    for i in range( len(prime_numbers) ):
        perfect = perfect_numbers( prime_numbers[i] )
        if perfect < number:
            print(perfect, end = ' ')           
        else:
            return
 
def no_perfect_numbers(number):
    if number < 6:
        print(0)    
 
number = 0
while number < 1:
    number = int(input())
    print_all_perfect_numbers_less_than(number + 1)
    no_perfect_numbers(number)
    break
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
17.01.2022, 13:59
Приехал как-то Илья Муромец рубить голову Змею Горынычу. Приехал отрубил Змею голову. А у Змея две головы выросли. Отрубил Илья Муромец Змею две головы — а у того четыре выросли. Отрубил он ему четыре — а у того восемь голов выросло. Рубил Муромец головы, рубил, рубил-рубил, в конце концов нарубил в общей сложности 65535 голов вот тут-то и помер Змей Горыныч. Потому что был он шестнадцатиразрядный.

Ни одного решения проходящего все тесты здесь на сайте и в сети не найдено. Может в 17 тесте разрядности для ответа не хватает?
0
Эксперт Python
8850 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
17.01.2022, 15:13
Лучший ответ Сообщение было отмечено КулХацкеръ как решение

Решение

System_Failure, нашел же решение в первом своем комментарии...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def is_prime_2_pow(n, k):
    s = 4
    for i in range(k-2):
        s = (s*s - 2)%(n-1)
 
    return s==0
 
 
def perfects(n):
    a = 4
    res = [a//2*(a-1)]
    k = 2
    
    while a*(2*a-1) <= n:
        a *= 2
        k += 1
        if is_prime_2_pow(a, k):
            res.append(a//2*(a-1))
        
    print(*res)
 
 
n=int('1'+'0'*800)#int(input())
if n < 6:
    print(0)
else:
    perfects(n)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
17.01.2022, 16:02
Цитата Сообщение от System_Failure Посмотреть сообщение
Задача не решена.
- не свисти. Она решена несколько раз.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
17.01.2022, 19:18
del
Цитата Сообщение от Catstail Посмотреть сообщение
Простенькое решение
Да, что-то я перемудрил в своей предыдущей программе.
Вот более простенько:

Python
1
2
3
4
5
6
7
8
9
10
p = [2,3,5, 7,13,17, 19,31,61, 89,107,127, 521,607,1279, 2203,2281,3217, 4253,4423,9689, 9941,11213]
while True:
    print()
    n = float( input('n = ') )
    for q in p:
        k = 2**(q-1)*(2**q - 1)
        if k < n:
            print('-> ', k)
        else:
            break
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
17.01.2022, 19:26
Python
1
2
3
a = [1, 2, 4, 6, 12, 16, 18, 30, 60, 88]
 
print([(1 << p) * ((2 << p) - 1) for p in a])
1
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
17.01.2022, 23:38
Цитата Сообщение от Catstail Посмотреть сообщение
- не свисти. Она решена несколько раз.
Ваш код, как и мой, проваливает два теста там, где это решение спрашивают.
Другие решения не проходят ещё больше тестов.

Gdez, спасибо за чистый код. Ваше решение проходит все тесты.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,710
Записей в блоге: 14
18.01.2022, 09:18
Цитата Сообщение от System_Failure Посмотреть сообщение
проваливает два теста там, где это решение спрашивают
- так ведь запускаешь-то его ты. Вот и думай, в чем проблема. Я этих тестов не вижу.
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 7
18.01.2022, 11:19
Тем, кто решает задачу, известно только условие. Его полностью я привожу здесь выше. Каким тестам подвергается код испытуемым не известно. Виден лишь результат как на моей картинке с итогами теста.
Catstail, вы уж простите, если я вас чем-либо обидел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.01.2022, 11:19
Помогаю со студенческими работами здесь

Напишите программу, которая вводит натуральное число n и находит все совершенные числа в диапазоне от 1 до n
Найдите, пожалуйста, ошибку!!! #include &lt;iostream&gt; using namespace std; int main() { int i,n,b,a; cout &lt;&lt;...

Дано натуральное число n. Получить все совершенные числа, меньше n
Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением себя самого. Число 6 – совершенное, так...

Дано натуральное число n, получить все совершенные числа, меньше n
Натуральное число называется совершенным, если оно равно сумме всех своих делителей за исключением самого себя.Например, 6=1+2+3.Дано...

Дано натуральное число n. Получить все совершенные числа, меньше n.
3.Натуральное число называется совершенным, если оно равно сумме всех своих делителей, за исключением себя самого. ...

Дано натуральное число N. Напечатать все совершенные числа, меньше N
Я в паскале лох и мне очень срочно нужна помощь спецов в этом деле! Нужно решить всего лишь одну маленькую задачу!!! Задача: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru