Составить программу, которая определяет совершенное число. в Паскале.
Натуральное число называют совершенным, если оно равно сумме своих простых делителей, не считая его самого.
Т.е. сумма всех чисел, на которые нацело делится число, за исключением самого числа.
К примеру, числа, на которые делится число 6 => 1,2,3. Их сумма также равна 6 = 1+2+3
Значит число 6 совершенное.
Следующая программа определяет, совершенное число или нет.
var
sum: integer;
d: integer;
i: integer;
begin
write(‘Введите целое число: ‘);
readln(i);
if i <> 1 then
begin
for d:=1 to (i div 2) do
begin
if i mod d = 0 then sum:= sum + d;
end;
end;
if i = sum then writeln(‘числo ‘, i, ‘совершенное’)
else writeln(‘числo ‘, i, ‘НЕ совершенное’);
Проверить, является ли заданное натуральное число совершенным
Формулировка. Дано натуральное число. Проверить, является ли оно совершенным.
Примечание: совершенным числом называется натуральное число, равное сумме всех своих собственных делителей (то есть натуральных делителей, отличных от самого числа). Например, 6 – совершенное число, оно имеет три собственных делителя: 1, 2, 3, и их сумма равна 1 + 2 + 3 = 6.
Решение. Эта задача напоминает задачу 17, в которой нужно было найти количество всех натуральных делителей заданного числа. Напомним код ее основной части (назовем его кодом 1):
for i := 1 to n do begin
if n mod i = 0 then inc(count)
Как видно, в этом цикле проверяется делимость числа n на все числа от 1 до n, причем при каждом выполнении условия делимости увеличивается на 1 значение счетчика count с помощью функции inc. Чтобы переделать этот код под текущую задачу, нужно вместо инкрементации (увеличения значения) переменной-счетчика прибавлять числовые значения самих делителей к некоторой переменной для хранения суммы (обычно ее мнемонически называют sum, что в пер. с англ. означает «сумма»). В связи с этим оператор
if n mod i = 0 then inc(count);
в коде 1 теперь уже будет выглядеть так:
if n mod i = 0 then sum := sum + i;
Кроме того, чтобы не учитывалось само число n при суммировании его делителей (насколько мы помним, этот делитель не учитывается в рамках определения совершенного числа), цикл должен продолжаться не до n, а до n – 1. Правда, если говорить точнее, то цикл следовало бы проводить до n div 2 (также это обсуждалось в задаче 15), так как любое число n не может иметь больших делителей, иначе частное от деления должно быть несуществующим натуральным число между 1 и 2.
Единственное, что останется теперь сделать – это вывести ответ, сравнив число n с суммой его делителей sum как результат булевского выражения через writeln:
Поиск совершенный чисел — Pascal(Паскаль)
Совершенное число́ (др.-греч. ἀριθμὸς τέλειος) — натуральное число, равное сумме всех своих собственных делителей (то есть всех положительных делителей, отличных от самого́ числа). По мере того как натуральные числа возрастают, совершенные числа встречаются всё реже. Неизвестно, бесконечно ли множество всех совершенных чисел.
Совершенные числа образуют последовательность:
6,
28,
496,
8128,
33 550 336,
8 589 869 056,
137 438 691 328,
2 305 843 008 139 952 128,
2 658 455 991 569 831 744 654 692 615 953 842 176,
191 561 942 608 236 107 294 793 378 084 303 638 130 997 321 548 169 216, …
Как найти совершенное число в паскале
1. Найти произведение совершенных чисел из 10 случайных, взятых в интервале[1, 10].
Ответ может быть таким:
8 9 9 1 5 4 10 9 1 9
совершенных чисел нет
8 1 3 1 9 6 8 6 8 2
произведение совершенных чисел=36
p — произведение чисел;
ch — число;
sum — сумма делителей >
-
begin
ch:= random(10)+1; write(ch:5); <берем случайное число в заданном интервале и выводим его на экран>
sum :=0;
For i:=1 to ch-1 do
-
if ch mod i =0 then sum:=sum +i;
if p > 1 then writeln(‘произведение совершенных чисел=’,p)
else writeln(‘совершенных чисел нет’)
Наверх
Блок-схема
2. Поиск совершенных чисел в заданном с клавиатуры интервале.
for num:=x1 to x2 do
-
begin
sum:=1;
for i:=2 to (num-1) do
-
if num mod i=0 then sum:=sum+i;
Наверх
Блок-схема
3. Из 10 случайных чисел в интервале [1, 10] найти количество совершенных.
Пояснение: фактически надо найти количество шестерок.
Ответ может быть таким: 6 6 6 kch=3