Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 5

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

14.07.2013, 22:33. Показов 1847. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток
Помогите с задачей пожалуйста, очень нужно, желательно срочно!

Найти среди всех элементов матрицы, вне главной диагонали, все совершенные числа.

Заранее благодарю.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.07.2013, 22:33
Ответы с готовыми решениями:

Найти совершенные числа
Вывести все совершенные числа от 1 до 99 (совершенным называется число, равное сумме всех своих делителей, меньших, чем само это число....

Найти все совершенные числа от 1 до 100
1. Найти все совершенные числа от 1 до 100. pashqa`, вновь обращаю ваше внимание на правила форума: для каждой задачи создавайте...

Найти и напечатать все совершенные числа в интервале от 2 до х.
Число, равное сумме всех своих делителей, включая единицу, называется совершенным. Найти и напечатать все совершенные числа в интервале от...

3
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,461
15.07.2013, 01:30
Совершенные числа - редкий зверь в наших краях. Материал из Википедии.
Первые совершенные числа: 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128, 2658455991569831744654692615953842176, 1915619426082361072947933780843036381309 97321548169216
А максимальное положительное целое число компьютерное (если без плясок с бубном) либо 231=2147483648, либо 263=9223372036854775808. Для примера возьмём 231=2147483648. тогда нужно будет искать числа 6, 28, 496, 8128, 33550336 (остальные - смысл умер, они больше, чем 231). Вот программа, генерирует случайный массив 8*8 типа integer и ищет эти 5 чисел, не расположенные на главной диагонали. В случае неуспеха опять генерирует... до тех пор, пока не найдёт хотя бы одно число, либо пока количество генераций не будет равно 231.
Pascal
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
program Perfect;
 
var a: array [1..8, 1..8] of integer;
    i, j, k: integer;
    b: boolean;
 
begin
  b := true;
  k := 0;
  repeat
    randomize;
    for i := 1 to 8 do
      begin
        for j := 1 to 8 do
          begin
            a[i, j] := random(33550336) + 1;
            write(a[i, j]:9)
          end;
        writeln
      end;
    writeln('Perfect numbers:');
    for i := 1 to 8 do for j := 1 to 8 do
      begin
        if (i <> j) and
           ((a[i, j] = 6) or
           (a[i, j] = 28) or
           (a[i, j] = 496) or
           (a[i, j] = 8128) or
           (a[i, j] = 33550336)) then
          begin
            writeln('a[', i:1, ', ', j:1, '] = ', a[i, j]);
            b := false;
          end;
      end;
    if b then writeln('None');
    k := k + 1;
  until not(b) or (k = maxint);
  writeln('Repeats: ', k);
  readln
end.
Если желаете ручной ввод массива - сделайте его, пожалуйста, сами, мне при проверке программы влом набирать не то что 64 значения a[i, j], а даже и 25. Всего Вам доброго.
1
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 5
15.07.2013, 20:11  [ТС]
Спасибо огромное!

Добавлено через 18 часов 12 минут
И еще раз здравствуйте,

А вы не могли помочь с внедрением самого алгоритма поиска этих "совершенных чисел" в код программы, я ознакомился с несколькими методами представленными в сети, но к сожалению, не получилось в них разобраться, а именно как они их вычисляют

Спасибо
0
Модератор
10448 / 5739 / 3407
Регистрация: 17.08.2012
Сообщений: 17,461
16.07.2013, 02:33
Цитата Сообщение от Ilya32 Посмотреть сообщение
не получилось в них разобраться
Так выше в моём посте в ссылке на Википедию всё разжёвано. Вот написал программу. В составе программы есть функция определения совершенства числа. Сначала оценивается совершенство числа по предпоследнему свойству совершенных чётных чисел из Википедии, а затем, при необходимости, ищутся все собственные делители числа и их сумма сравнивается с самим числом. Диапазон чисел более 50000 ставить не рекомендую: ждать запаришься. Программа:
Pascal
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
program PerfNum;
 
{функция оценки совершенства числа}
function perfect(x: integer): boolean;
{perfect(x) = true, если число совершенное}
 
var h, g, sum: integer; {счётчик, максимальный делитель, сумма делителей}
 
begin
{если число <= 0}
{или}
{число > 496 и не оканчивается на   16, 28, 36, 56, 76}
  if (x <= 0) or (not(x mod 100 in [16, 28, 36, 56, 76]) and (x > 496))
    then perfect := false {тогда точно не совершенное}
    else {в остальных случаях нужно проверять}
      begin
        g := x div 2; {делитель нацело не может быть более половины числа}
        sum := 0; {сумма делителей пока равна 0}
        {Перебираем все натуральные числа от 1 до x/2,}
        {и если найден делитель, складываем его с суммой}
        for h := 1 to g do if x mod h = 0 then sum := sum + h;
        perfect := x = sum;
        {perfect(x) = true, если x равен сумме своих делителей, и}
        {perfect(x) = false, если x не равен сумме своих делителей}
      end;
end;
 
const c = 14; {границы массива}
      n = 10000; {диапазон чисел}
      {можно n вплоть до 2^31 - 1 = 2147483648 (это maxint)}
      {однако, не дождёшься, когда посчитает}
      q = 5; {количество разрядов для печати массива, для n = 10000 }
 
var a: array [1..c, 1..c] of integer; {массив}
    i, j, k: integer; {счётчик, счётчик, счётчик попыток}
    b: boolean;
 
begin
  randomize;
  b := false; {флаг нахождения совершенного числа}
  k := 0; {попыток нахождения ещё не было}
  repeat {начало цикла поиска}
    {генерируем очередной массив, потому что вводить врукопашную муторно}
    for i := 1 to c do
      begin
        for j := 1 to c do
          begin
            a[i, j] := random(n); {генерируем}
            write(a[i, j]:q) {и печатаем}
          end;
        writeln {перевод на новую строку}
      end;
    writeln('Perfect number(s):');
    {ищем в массиве совершенные числа}
    for i := 1 to c do for j := 1 to c do
      begin
        if (i <> j) and perfect(a[i, j]) then {кроме главной диагонали}
          begin
            b := true; {нашли}
            writeln('a[', i:1, ', ', j:1, '] = ', a[i, j]); {печатаем}
          end;
      end;
    if not(b) then writeln('Not found'); {не нашли, печатаем, что нет}
    k := k + 1; {следующая попытка}
  until b or (k = maxint); {цикл, пока не найдём или счетчик попыток не кончится}
  writeln('Repeats: ', k); {сколько было генераций массива}
  readln
end.
Всего доброго.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2013, 02:33
Помогаю со студенческими работами здесь

Найти совершенные числа
Помогите плиз, понимаю, что программа легкая, но сам не догоняю как это сделать Задача: составить программу получения всех совершенных...

Встроенные циклы.  На отрезке [n, m] найти все простые (совершенные, автоморфные, полиндромы, числа Армстронга и т.д.) числа
Я студент, Завтра надо сдать это задание. Прошу написать решение, прикрепить его в файл, чтобы была форма и код сразу готовыми. P.S....

Найти совершенные числа.
Нужно определить является ли число n совершенным, или нет. Совершенное число, это число которое равно сумме всех соих делитилей, кроме...

Найти совершённые числа из диапазона [a, b]
Здравствуйте ) Кто может подсказать как написать её?) А то вообще плох в программировании ( Найти совершённые числа из диапазона .Если...

Найти совершенные числа в интервале от 1 до n
Найти совершенные числа в интервале от 1 до n. Совершенное число - натуральное число, равное сумме всех своих собственных делителей (т. е....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru