Как найти совершенное число python

Найти совершенные числа

Просмотров 14.7к. Обновлено 15 октября 2021

Найти все совершенные числа до 10000. Совершенное число — это такое число, которое равно сумме всех своих делителей, кроме себя самого. Например, число 6 является совершенным, т.к. кроме себя самого делится на числа 1, 2 и 3, которые в сумме дают 6.

В цикле, перебирая натуральные числа до 10000,

  1. присвоить переменной, в которой будет накапливаться сумма делителей, 0.
  2. В цикле от 1 до половины текущего натурального числа
    1. пытаться разделить исследуемое число нацело на счетчик внутреннего цикла.
    2. Если делитель делит число нацело, то добавить его к переменной суммы делителей.
  3. Если сумма делителей равна исследуемому натуральному числу, то это число совершенно и следует вывести его на экран.

Pascal

совершенное число паскаль


var
i,j,s: word;
begin
for i := 1 to 10000 do begin
s := 0;
for j:=1 to i div 2 do
if i mod j = 0 then
s := s+j;
if s = i then
write(i,' ');
end;
writeln;
end.



6 28 496 8128

Язык Си


#include < stdio.h>
main() {
int i,j,s,l;
for (i=2; i<10000; i++) {
s = 0;
for (j=1; j < i; j++)
if (i%j == 0)
s += j;
if (s == i)
printf("%dn", i);
}
}

Если i поделить на 2, то программа работает неправильно. В Питоне такая же проблема.

Python

совершенные числа python


for i in range(2, 10000):
s = 0
for j in range(1, int(i // 2) + 1):
if i % j == 0:
s += j
if s == i:
print(i)



6
28
496
8128

КуМир


алг совершенные числа
нач
цел i,j,s
нц для i от 1 до 1000
s := 0
нц для j от 1 до div(i,2)
если mod(i,j) = 0 то
s := s + j
все
кц
если s = i то
вывод i, " "
все
кц
кон

Невероятно долгий поиск даже до 1000.

Basic-256


for i=2 to 10000
s = 0
for j=1 to i2
if i%j = 0 then s = s + j
next j
if s = i then print i
next i



6
28
496
8128

Играть с числами — это то, чем мы занимаемся с детства. Основные арифметические операции, выполняемые с числами, дают ценные результаты. В игровом обучающем путешествии мы должны уделять больше внимания развитию логики в математике, поскольку она становится основой программирования.

В этой статье мы обсудим, что такое идеальное число, какие нужно предпринять шаги, чтобы определить, идеально ли число или нет, и, наконец, мы увидим, как его программу можно написать на Python.

Итак, приступим …

Во-первых, давайте разберемся, что такое идеальное число в Python?

Совершенное число — это число, в котором сумма делителей числа равна числу.

Убедитесь, что мы должны исключить число при вычислении суммы делителей.

Теперь посмотрим, какие шаги необходимо предпринять для определения идеального числа.

  1. Прежде всего, мы попросим пользователя ввести целое число, которое будет сохранено в переменной.
  2. Теперь мы объявим переменную под названием «сумма», где мы будем хранить сумму делителей данного числа.
  3. Следующая задача — использовать цикл for, в котором мы разделим наше число на число, инициализированное для переменной i, затем мы увеличим значение I и проверим, какие числа дают нам остаток как ноль. Эти числа и будут нашими делителями.
  4. Теперь мы возьмем каждый из делителей этого числа и сложим его с переменной «сумма».
  5. Наконец, мы будем использовать ключевое слово оператора решения ‘if’, чтобы сравнить число, указанное пользователем, со значением суммы.
  6. Если значения равны, мы отобразим результат как «Это идеальное число», иначе мы отобразим «Это не идеальное число».

Пришло время взглянуть на программу Python.

Пример:

 
num=int(input("Enter the number: ")) 
sum_v=0 
for i in range(1,num): 
    if(num%i==0): 
        sum_v=sum_v+i 
if(sum_v==num): 
    print("The entered number is a perfect number") 
else: 
    print("The entered number is not a perfect number") 

Выход:

Enter the number: 6 
The entered number is a perfect number 
Enter the number: 25 
The entered number is not a perfect number 

Объяснение:

  1. У нас есть переменная num, и мы попросили пользователя указать ее значение.
  2. Как обсуждалось ранее, мы объявили переменную sum_v равной нулю.
  3. Теперь мы использовали цикл for, диапазон которого составляет от 1 до числа, предоставленного пользователем.
  4. Следующий шаг — проверить, дает ли число при делении на все числа, указанные в диапазоне, остаток как ноль.
  5. Эти значения будут добавлены и сохранены в переменной sum_v.
  6. Наконец, мы использовали «if», чтобы сравнить сумму делителей с числом и отобразить требуемый результат.
  7. В этой программе пользователь указал значения 6 и 25, и отображается желаемый результат.

Давайте посмотрим на другую программу, в которой мы реализуем то же самое с помощью функции.

Пример 2:

 
def num_perfect(num): 
    sum_n = 0 
    for i in range(1, num): 
        if num % i == 0: 
            sum_n=sum_n+i 
    return sum_n == num 
print(num_perfect(25)) 

Выход:

False 

Объяснение:

В этой программе мы использовали шаги, аналогичные тем, которые мы обсуждали в предыдущем примере, с той лишь разницей, что здесь мы определили функцию и вызвали ее, указав значение.

Поскольку оператор return присутствует в конце определения функции, он дает значение как True или False.

Итак, в этом руководстве мы узнали об идеальных числах, процессе, которому мы должны следовать, чтобы определить, является ли данное число идеальным или нет, и в конце обсудили его реализацию на Python.

1135-11cookie-checkИдеальное число в Python — как найти и проверить?

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

Совершенное число — натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого числа).

Например, 6 — совершенное число, поскольку 1 + 2 + 3 = 6, а 1, 2 и 3 — делители числа 6.

Аналогично, совершенным числом является 28, поскольку 1 + 2 + 4 + 7 + 14 = 28.

Примеры

check_perfect(6) ➞ True

check_perfect(28) ➞ True

check_perfect(496) ➞ True

check_perfect(12) ➞ False

check_perfect(97) ➞ False

Варианты решений

def check_perfect(num):
    return sum([i for i in range(1, num) if num%i==0]) == num
def check_perfect(num):
    factors = []
    for i in range(1,num):
        if num % i == 0:
            factors.append(i)
    return sum(factors) == num

«Python Последнее обновление 25 июля 2019 13:12:43 (UTC / GMT +8 часов)

script1adsense2code

script1adsense3code

Функции Python: Упражнение 11 с решением

Напишите функцию Python, чтобы проверить, является ли число совершенным или нет.

Согласно Википедии: в теории чисел совершенное число – это положительное целое число, равное сумме его собственных положительных делителей, то есть сумме его положительных делителей, исключая само число (также известное как его аликвотная сумма). Эквивалентно, идеальное число – это число, которое составляет половину суммы всех его положительных делителей (включая себя).
Пример : первое совершенное число равно 6, потому что 1, 2 и 3 являются его собственными положительными делителями, а 1 + 2 + 3 = 6. Эквивалентно, число 6 равно половине суммы всех его положительных делителей: (1 + 2 + 3 + 6) / 2 = 6. Следующее совершенное число – 28 = 1 + 2 + 4 + 7 + 14. За ним следуют совершенные числа 496 и 8128.

Пример решения : –

Код Python:

def perfect_number(n):
    sum = 0
    for x in range(1, n):
        if n % x == 0:
            sum += x
    return sum == n
print(perfect_number(6))
 

Пример вывода:

 Правда

Наглядная презентация:

«Python

Блоксхема:

«Блок-схема:

Визуализируйте выполнение кода Python:

Следующий инструмент визуализирует, что компьютер делает шаг за шагом при выполнении указанной программы:

Редактор кода Python:

Есть другой способ решить это решение? Внесите свой код (и комментарии) через Disqus.

Предыдущий: Напишите программу на Python для печати четных чисел из заданного списка.
Далее: Напишите функцию Python, которая проверяет, является ли переданная строка палиндромом или нет.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense5code

disqus2code

script1adsense6code

script1adsense7code

script1adsense8code

Fanago

0 / 0 / 0

Регистрация: 19.12.2016

Сообщений: 14

1

Совершенные числа

24.01.2017, 18:36. Показов 30403. Ответов 10

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый всем вечер, форумчане.
Задание: Написать скрипт выписывающий все совершенные числа в указанном диапазоне

Мой вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
# -*- coding: cp1251 -*-
y = float(input("Укажите верхнюю границу: "))
x = float(input("Укажите нижнюю границу: "))
 
for i in range(int(x),int(y)):
    s = 0
    for j in range(1,i):
        if i/j == 0:
            s += j
    if s == i:
        print(i)

Какие есть предложения? Я ввожу диапазон но ничего не происходит, ошибки не выдает.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

24.01.2017, 18:36

10

Ennjin

103 / 81 / 54

Регистрация: 25.11.2016

Сообщений: 278

24.01.2017, 19:33

2

Fanago,

Python
1
2
3
4
5
6
7
8
9
x, y = [int(i) for i in (input('Укажите границы через пробел: ').split())]
 
def evklid(n):
    return 2 ** (n - 1) * (2 ** n - 1)
 
for i in range(x, y + 1):
    if i % 2:
        if evklid(i) in range(x, y + 1):
            print(evklid(i))

Добавлено через 15 минут

Не по теме:

Если честно, то здесь немного не точный код



0



oldnewyear

438 / 430 / 159

Регистрация: 21.05.2016

Сообщений: 1,338

25.01.2017, 02:49

3

Fanago, у вас в 8й строчке ошибка: if i/j == 0. Должно быть if i % j == 0

Python
1
2
3
4
5
6
7
8
9
10
y = int(input('Укажите верхнюю границу: '))
x = int(input('Укажите нижнюю границу: '))
 
for i in range(x,y):
    s = 1
    for j in range(2, i // 2 + 1):
        if i % j == 0:
            s += j
    if s == i:
        print(i)



0



0 / 0 / 0

Регистрация: 13.01.2016

Сообщений: 40

21.02.2022, 13:55

4

Цитата
Сообщение от Ennjin
Посмотреть сообщение

x, y = [int(i) for i in (input(‘Укажите границы через пробел: ‘).split())]
def evklid(n):
    return 2 ** (n – 1) * (2 ** n – 1)
for i in range(x, y + 1):
    if i % 2:
        if evklid(i) in range(x, y + 1):
            print(evklid(i))

СПАСИБО!
Единственный вариант который работает



0



Lelush_Lamberg

0 / 0 / 0

Регистрация: 10.10.2022

Сообщений: 2

10.10.2022, 13:19

5

Python
1
2
3
4
5
6
7
8
9
n = int(input("Введите число "))
 
for i in range(1, n+1):
   a = 0
   for j in range(1, i):
        if i % j == 0:
          a += j
   if a == i:
      print(i)



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

35427 / 19452 / 4071

Регистрация: 12.02.2012

Сообщений: 32,486

Записей в блоге: 13

10.10.2022, 17:33

6

Lelush_Lamberg, пользуйся тэгами языка!

Добавлено через 4 минуты

Цитата
Сообщение от Solnyshko_erm
Посмотреть сообщение

Единственный вариант который работает

– не работает. Задал диапазон 1-100. Получил ответ 1, 28. Единица не при чем. Шесть пропущено.



0



Sapov

24 / 18 / 7

Регистрация: 30.09.2022

Сообщений: 54

11.10.2022, 23:53

7

Python
1
2
3
4
5
6
7
8
9
10
11
for i in range(1, 10000):
    d = 0
    lst =[]
    for j in range(1, i):
        if i == j:
            continue
        if i % j == 0:
            lst.append(j)
 
    if sum(set(lst)) == i:
        print(f' {i} >>> Совершенное число')



0



Catstail

Модератор

Эксперт функциональных языков программированияЭксперт Python

35427 / 19452 / 4071

Регистрация: 12.02.2012

Сообщений: 32,486

Записей в блоге: 13

12.10.2022, 07:21

8

Sapov, и зачем использовать список? Сумму делителей легко накопить и без списка…

Python
1
2
3
4
5
6
7
8
9
10
11
12
for a in range(2,10001):
    s=1
    k=2
    while k*k<=a:
        if a%k==0:
            s+=k
            m=a//k
            if m != k:
                s+=m
        k+=1
    if a==s:
        print(a)

Вывод:

6
28
496
8128



1



NaFo_61

0 / 0 / 0

Регистрация: 13.04.2021

Сообщений: 4

12.10.2022, 22:39

9

Полностью рабочий код по поиску совершенных чисел от 1 до 10000, ну судите строго, я новичок

Python
1
print(f"Совершенные числа от 1 до 10000 -> {list(filter(lambda checking_number: sum([number for number in range(1, checking_number) if checking_number % number == 0]) == checking_number, [checking_number for checking_number in range(1, 10000)]))}")



0



24 / 18 / 7

Регистрация: 30.09.2022

Сообщений: 54

13.10.2022, 00:35

10

Да, незачем действительно. Спасибо.



0



Luntik3000

0 / 0 / 0

Регистрация: 09.12.2022

Сообщений: 1

09.12.2022, 21:47

11

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import math
def sov(x):
    summa = 1
    md = round(math.sqrt(x)) 
    for i in range(2, md + 1):
        if x % i == 0:
            summa += x // i + i
        if md * md == x:
            summa -= md
    return summa == x
 
 
x = int(input())
y = int(input())
for i in range(x, y):
    if sov(i):
        print(i)

Во какой у меня способ тут используется алгоритм для очень быстрого нахождения делителя



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

09.12.2022, 21:47

Помогаю со студенческими работами здесь

Процедуры и функции: Получить совершенные числа, меньше заданного числа n
Привет всем, прошу помочь написать программу.
Получить совершенные числа, меньше заданного числа…

Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N c++
Для заданного натурального числа N вывести в столбик все совершенные числа меньшие N. Совершенное…

Напечатать все совершенные числа, меньшие заданного числа N
Натуральное число M называется совершенным, если оно равно сумме всех своих делителей, включая 1,…

Напечатать все совершенные числа меньшие заданного числа N
Натуральное число M называется совершенным, если оно равно сумме всех своих делителей, включая 1,…

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

Или воспользуйтесь поиском по форуму:

11

Добавить комментарий