Иногда задают задачи по нахождению совершенного числа.
Как гласит Википедия, Совершенное число это :
натуральное число, равное сумме всех своих собственных делителей (т. е. всех положительных делителей, отличных от самого числа).
Реализация функции на Pascal:
[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;
И для примера полный исходный код. Использование этой функции:
[pascal]
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++
[cpp]
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;
}
[/cpp]
Всё так же.
на C# чуть иначе. Я переработал функцию посчитав, что она перегружена и добавил ключевое слово static
[csharp]
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;
}
[/csharp]
и использование в Console Application
[csharp]
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);
}
}
[/csharp]