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;

принимает натуральное число, возвращает 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.

Такая же реализация этой функции на 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;

return false;
}

и использование в Console Application


static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
if (isPerfectNumber(n))
{
Console.WriteLine("{0} is perfect",n);
}
else
{
Console.WriteLine("{0} is not perfect", n);
}

}

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