Exercício: verificar se um número é perfeito

Fala galera da programação, tudo beleza?
Aliando a matemática com a programação, a ideia do post de hoje é criar um programa para descobrir se um número informado é ou não um número perfeito. Mas e você sabe o que é um número perfeito?
Explicação sobre o número perfeito
Um número perfeito é um número inteiro positivo que é igual à soma de seus divisores próprios positivos (excluindo o próprio número). Em outras palavras, um número perfeito é aquele cuja soma dos seus divisores, excluindo o próprio número, é igual a ele mesmo.
Por exemplo, o número 6 é considerado um número perfeito, pois seus divisores próprios positivos (1, 2 e 3) somam-se a 6. Outros exemplos de números perfeitos são 28, 496 e 8128.
Os números perfeitos têm sido estudados desde a antiguidade e são objeto de interesse na teoria dos números. No entanto, até o momento, não se sabe se existem infinitos números perfeitos. Os números perfeitos conhecidos são todos números compostos e podem ser expressos em uma forma específica relacionada aos números primos chamada de “fórmula de Euclides-Euler”.
Bacana hein? Agora vamos ao exercício na programação!
Exercício:
Crie um programa e um algoritmo que leia um número e mostre se ele é ou não um número perfeito
Exemplo em C#
/*
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*/
using System;
class Program
{
// Função para verificar se um número é perfeito
static bool IsPerfectNumber(int number)
{
int sum = 0;
// Encontra todos os divisores próprios do número e os soma
for (int i = 1; i < number; i++)
{
if (number % i == 0)
{
sum += i;
}
}
// Verifica se a soma dos divisores é igual ao número original
if (sum == number)
{
return true;
}
else
{
return false;
}
}
static void Main(string[] args)
{
Console.Write("Digite um número: ");
int number = int.Parse(Console.ReadLine());
// Chama a função IsPerfectNumber e exibe o resultado
if (IsPerfectNumber(number))
{
Console.WriteLine($"{number} é um número perfeito.");
}
else
{
Console.WriteLine($"{number} não é um número perfeito.");
}
}
}
Explicação
Neste programa em C#, a função IsPerfectNumber verifica se um número é perfeito. A função itera de 1 até o número (exclusivo) e soma todos os divisores próprios.
No método Main, o usuário é solicitado a digitar um número, que é armazenado na variável number. Em seguida, a função IsPerfectNumber é chamada com o número fornecido como argumento. O resultado é exibido no console, informando se o número é ou não um número perfeito.
Exemplo em C++
/******************************************************************************
Criado pelo Professor Giovani DA Cruz
https://giovanidacruz.com.br
*******************************************************************************/
#include <iostream>
using namespace std;
// Função para verificar se um número é perfeito
bool isPerfectNumber(int number) {
int sum = 0;
// Encontra todos os divisores próprios do número e os soma
for (int i = 1; i < number; i++) {
if (number % i == 0) {
sum += i;
}
}
// Verifica se a soma dos divisores é igual ao número original
if (sum == number) {
return true;
} else {
return false;
}
}
int main() {
int number;
cout << "Digite um número: ";
cin >> number;
// Chama a função isPerfectNumber e exibe o resultado
if (isPerfectNumber(number)) {
cout << number << " é um número perfeito." << endl;
} else {
cout << number << " não é um número perfeito." << endl;
}
return 0;
}
Explicação
Neste programa, a função isPerfectNumber recebe um número como argumento e verifica se ele é um número perfeito. A função itera de 1 até o número (exclusivo) e verifica se cada número é um divisor próprio do número original. Se for, o número é somado à variável sum.
Após o término do loop, é feita uma comparação entre a soma dos divisores e o número original. Se forem iguais, o número é considerado perfeito e a função retorna true. Caso contrário, retorna false.
No programa principal, o usuário é solicitado a digitar um número. Em seguida, a função isPerfectNumber é chamada com o número fornecido como argumento. O resultado é exibido na tela, informando se o número é ou não um número perfeito.
Exemplo em Pascal
(*
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*)
program NumeroPerfeito;
// Função para verificar se um número é perfeito
function IsPerfectNumber(number: Integer): Boolean;
var
sum, i: Integer;
begin
sum := 0;
// Encontra todos os divisores próprios do número e os soma
for i := 1 to number - 1 do
begin
if number mod i = 0 then
begin
sum := sum + i;
end;
end;
// Verifica se a soma dos divisores é igual ao número original
if sum = number then
begin
IsPerfectNumber := True;
end
else
begin
IsPerfectNumber := False;
end;
end;
var
number: Integer;
begin
Write('Digite um número: ');
Readln(number);
// Chama a função IsPerfectNumber e exibe o resultado
if IsPerfectNumber(number) then
begin
Writeln(number, ' é um número perfeito.');
end
else
begin
Writeln(number, ' não é um número perfeito.');
end;
end.
Explicação
Neste programa em Pascal, a função IsPerfectNumber verifica se um número é perfeito, seguindo a mesma lógica do exemplo anterior. A função itera de 1 até o número (exclusivo) e soma todos os divisores próprios.
No programa principal, o usuário é solicitado a digitar um número, que é armazenado na variável number. Em seguida, a função IsPerfectNumber é chamada com o número fornecido como argumento. O resultado é exibido no console, informando se o número é ou não um número perfeito.
Exemplo em Python
'''
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
'''
def is_perfect_number(number):
# Variável para armazenar a soma dos divisores
sum = 0
# Encontra todos os divisores próprios do número e os soma
for i in range(1, number):
if number % i == 0:
sum += i
# Verifica se a soma dos divisores é igual ao número original
if sum == number:
return True
else:
return False
number = int(input("Digite um número: "))
# Chama a função is_perfect_number e exibe o resultado
if is_perfect_number(number):
print(number, "é um número perfeito.")
else:
print(number, "não é um número perfeito.")
Explicação
Neste programa em Python, a função is_perfect_number verifica se um número é perfeito, seguindo a mesma lógica do exemplo anterior. A função itera de 1 até o número (exclusivo) e soma todos os divisores próprios.
No programa principal, o usuário é solicitado a digitar um número, que é convertido para inteiro e armazenado na variável number. Em seguida, a função is_perfect_number é chamada com o número fornecido como argumento. O resultado é exibido no console, informando se o número é ou não um número perfeito.
Exemplo em Java (PerfectNumber.java)
/*
Criado pelo Professor Giovani Da Cruz
https://giovanidacruz.com.br
*/
import java.util.Scanner;
public class PerfectNumber {
public static boolean isPerfectNumber(int number) {
// Variável para armazenar a soma dos divisores
int sum = 0;
// Encontra todos os divisores próprios do número e os soma
for (int i = 1; i < number; i++) {
if (number % i == 0) {
sum += i;
}
}
// Verifica se a soma dos divisores é igual ao número original
if (sum == number) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Digite um número: ");
int number = scanner.nextInt();
// Chama o método isPerfectNumber e exibe o resultado
if (isPerfectNumber(number)) {
System.out.println(number + " é um número perfeito.");
} else {
System.out.println(number + " não é um número perfeito.");
}
}
}
Explicação
Neste programa em Java, a função isPerfectNumber verifica se um número é perfeito, seguindo a mesma lógica dos exemplos anteriores. A função itera de 1 até o número (exclusivo) e soma todos os divisores próprios.
No método main, um objeto Scanner é criado para ler a entrada do usuário. Em seguida, o usuário é solicitado a digitar um número, que é armazenado na variável number. O método isPerfectNumber é chamado com o número fornecido como argumento. O resultado é exibido no console, informando se o número é ou não um número perfeito.
Beleza pessoal? Espero que tenham gostado do exercício.
Dúvidas ou sugestões de outras linguagens? Deixe o seu comentário!
Um abraço e até o próximo post. Valeu!