Pascal, Си/C++, C# Определение совершенного числа
Иногда задают задачи по нахождению совершенного числа.
Как гласит Википедия, Совершенное число это :
натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого числа).
Реализация функции на Pascal:
function isPerfectNumber(n: integer): boolean;
var
sum,i : integer;
begin
sum :=0;
if n > 0 then
begin
for i := 1 to n-1 do
begin
if (n mod i = 0) then
sum := sum + i;
end;
if (n = sum) then
isPerfectNumber := true
else
isPerfectNumber := false;
end
else isPerfectNumber := false;
end;
[/pascal]
принимает натуральное число, возвращает true, если число совершенное и false в ином случае. Так же, если ввести отрицательное число, вернет false;
И для примера полный исходный код. Использование этой функции:
program sovershennoe;
var
n : integer;
function isPerfectNumber(n: integer): boolean;
var
sum,i : integer;
begin
sum :=0;
if n > 0 then
begin
for i := 1 to n-1 do
begin
if (n mod i = 0) then
sum := sum + i;
end;
if (n = sum) then
isPerfectNumber := true
else
isPerfectNumber := false;
end
else isPerfectNumber := false;
end;
begin
write(‘Введите число для анализа: ‘);
readln(n);
if (isPerfectNumber(n)) then
writeln(‘Совершенное’)
else
writeln(‘Не совершенное’);
readln;
end.
[/pascal]
Такая же реализация этой функции на C++
bool isPerfectNumber(int n)
<
int sum = 0;
int i;
if (n > 0)
<
for (int i = 1; i < n; i++)
<
if (n % i == 0)
sum += i;
>
if (n == sum)
return true;
else
return false;
>
else return false;
>
на C# чуть иначе. Я переработал функцию посчитав, что она перегружена и добавил ключевое слово static
static bool isPerfectNumber(int n)
<
int sum = 0;
if (n < 0)
return false;
for (int i = 1; i < n; i++)
<
if (n % i == 0)
sum += i;
>
if (n == sum)
return true;
Поиск совершенный чисел — 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 до 1000 и выведите их на экран. Язык Паскаль
Число совершенно, если оно равно сумме всех своих делителей, кроме самого себя. Пример: 6=1+2+3. Найдите все совершенные числа от 1 до 1000 и выведите их на экран. Подсказка: вам необходимо найти все делители от 1 до исследуемого числа. Делителем числа называется число, которое делит данное без остатка (a mod b=0).
Решение: (если решать без использования массива)
Program Z1;
Var a, c, d, e : integer;
begin
d:=1;
while d 1) then begin e:=e+a;
a:=a+1;
end
else a:=a+1;
end;
if e=d then begin writeln(d);
d:=d+1; end
else d:=d+1;
end; end.