Как найти совершенное число в c
Перейти к содержимому

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

  • автор:

Поиск совершенного числа

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

Совершенное число́ (др.-греч. ἀριθμὸς τέλειος) — натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого́ числа). По мере того как натуральные числа возрастают, совершенные числа встречаются всё реже.

1-е совершенное число — 6 имеет следующие собственные делители: 1, 2, 3; их сумма равна 6.
2-е совершенное число — 28 имеет следующие собственные делители: 1, 2, 4, 7, 14; их сумма равна 28.
3-е совершенное число — 496 имеет следующие собственные делители: 1, 2, 4, 8, 16, 31, 62, 124, 248; их сумма равна 496.
4-е совершенное число — 8128 имеет следующие собственные делители: 1, 2, 4, 8, 16, 32, 64, 127, 254, 508, 1016, 2032, 4064; их сумма равна 8128.
ЗАДАЧА: найти пятое совершенное число. (Подсмотрел, что оно 8-значное: 33550336).
Вводим, например, 40000000, первые 4 ищет, 5-ое так и не дождался, проц. работает, загрузка на 30-40% (Core i5/2.8GHz).

Может есть способ оптимизировать и ускорить поиск другими алгоритмами.

Учусь в MS Visual Studio C++ 2013

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#include #include using namespace std; int sum(int a) { int b = 0; for (int i = 1; ia; i++) { if (a%i == 0) b += i; } return b; } void main() { setlocale(LC_ALL, "Russian"); int n; cout  <"Введите число: "; cin >> n; if (n == sum(n)) { cout  <"Результат работы функции для нахождения суммы делителей числа: "  (n)  ; cout  <"Число "   <" совершенное"; } else { cout  <"Число "   <" не совершенное"  ; cout  <"Результат работы функции для нахождения суммы делителей числа: "  (n)  ; cout  <"========================================================================="  ; cout  <"Ищем совершенные число. "  ; int sum = 0; for (int i = 1; in; i++) { sum = 0; for (int j = 1; ji / 2 + 1; j++) { if (i%j == 0) sum += j; } if (sum == i) cout  <"Cовершенное число № "   ; } } system ("pause"); }

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

Число совершенно, если оно равно сумме всех своих делителей, кроме самого себя. Пример: 6 = 1 + 2 + 3. Найдите все совершенные числа от 1 до 10000 и выведите их на экран.

Подсказка: необходимо найти все делители от 1 до тестируемого числа. Делителем числа называется число, которое делит данное без остатка ( a mod b = 0 ).

Алгоритм решения задачи:

  1. Каждое число от 1 до 1000 поочередно делить на все целые числа от 1 до этого числа. На самом деле достаточно до половины заданного числа.
  2. Найти сумму всех делителей и сравнить с самим числом. Если сумма и число равны, то последнее является совершенным.

Программа на языке Паскаль:

const N = 10000; var i, j, sum: integer; begin for i := 2 to N do begin sum := 0; for j := 1 to i div 2 do begin if i mod j = 0 then sum := sum + j; end; if sum = i then writeln(i, ' - perfect!'); end; end.

Результат выполнения программы:

6 - perfect! 28 - perfect! 496 - perfect! 8128 - perfect!

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

*

Новости:

Если Вы не можете войти на форум, потому что не подходит пароль, его нужно восстановить по указанной там ссылке.
http://seoaction.net/index.php?topic=877

  • Seoaction.net — seo и не только. »
  • Веб-строительство и веб-дизайн »
  • Программирование »
  • C, C++, C# (Си, Си плюс, Си флеш) »
  • Функция на совершенное число

Страницы: [1] Вниз

Автор Тема: Функция на совершенное число (Прочитано 2321 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Страницы: [1] Вверх

  • Seoaction.net — seo и не только. »
  • Веб-строительство и веб-дизайн »
  • Программирование »
  • C, C++, C# (Си, Си плюс, Си флеш) »
  • Функция на совершенное число

Быстрый ответ

В быстром ответе можно использовать BB-теги и смайлы.

Размер занимаемой памяти: 2 мегабайта.
Страница сгенерирована за 0.099 секунд. Запросов: 35.

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

Целое число называется совершенным, если его сомножители, включая 1 (но не само число) в сумме дают это число. Например, 6 – это совершенное число, так как 6 = 1 + 2 + 3. Напишите функцию is_perfect, которая определяет, является ли параметр number совершенным числом. Используйте эту функцию в программе, которая определяет и печатает все совершенные числа в диапазоне от 1 до 1000.

#include using namespace std; bool is_perfect(int num) < int sum = 0; //в цикле для полученного функцией аргумента //будем находить его сомножители, путем деления его на все //целые числа в интервале от 1 до самого числа for(int j = 1; j < num; j++) < if(num % j == 0) sum += j; >//если число и сумма его сомножителей равны - значит число совершенное if(sum == num) return true; return false; > int main() < for (int i = 1; i < 1000; ++i) < if (is_perfect(i)) < cout > >

Результат работы программы:

28.06.2019 в 19:47 #5692

1/2 часть цикла функции is_perfect работает впустую.
Из теории чисел известно, что все делители произвольного числа меньше половины этого числа, то есть j Учитывая этот факт, можно переписать is_perfect так:

bool is_perfect(int num) < int sum = 0; for (int j = 1; j > return sum == num; >

29.06.2019 в 06:07 #5693

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *