Un nombre parfait est un entier naturel qui est égal à la somme de ses diviseurs propres (tous ses diviseurs sauf lui-même). Par exemple, le premier nombre parfait est 6, car ses diviseurs propres sont 1, 2 et 3, et 1 + 2 + 3 = 6.
Le deuxième nombre parfait est 28. Ses diviseurs propres sont 1, 2, 4, 7 et 14, et 1 + 2 + 4 + 7 + 14 = 28.
Le troisième nombre parfait est 496, avec les diviseurs propres 1, 2, 4, 8, 16, 31, 62, 124, 248, dont la somme est 496.
Les nombres parfaits suivants incluent 8128 et 33550336.
Description du problème
Un diviseur d'un entier positif est tout entier positif qui le divise sans laisser de reste. Un nombre est dit parfait s'il est égal à la somme de ses diviseurs propres. Par exemple, 6 = 1 + 2 + 3 (les diviseurs de 6 sont 1, 2 et 3).
Votre tâche est d'écrire un programme qui lit deux entiers positifs n et m (où 1 <= n < m < 1000) et affiche tous les nombres parfaits dans l'intervalle [n, m]. Il est conseillé de créer une focntion pour vérifier si un nombre donné est parfait.
Implémenattion
La méthode suivante implémente la logique pour trouver les nombres prafaits dans une plage donnée.
import java.util.Scanner;
public class PerfectNumberFinder {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int lowerBound = input.nextInt(); // Borne inférieure
int upperBound = input.nextInt();
int perfectCount = 0;
if (lowerBound >= 1 && upperBound >= lowerBound) {
for (int number = lowerBound; number < upperBound; number++) {
if (isPerfect(number)) {
perfectCount++;
if (perfectCount > 1) {
System.out.print(" ");
}
System.out.print(number);
}
}
if (perfectCount == 0) {
System.out.println("Aucun nombre parfait trouvé");
}
}
input.close();
}
/**
* Vérifie si un entier est un nombre parfait.
* Un nombre est parfait si la somme de ses diviseurs propres est égale au nombre lui-même.
*
* @param candidateNumber Le nombre à vérifier.
* @return true si le nombre est parfait, false sinon.
*/
public static boolean isPerfect(Integer candidateNumber) {
int sumOfDivisors = 0; // Somme des diviseurs
for (int divisor = 1; divisor < candidateNumber; divisor++) {
if (candidateNumber % divisor == 0) { // Vérifie si 'divisor' est un diviseur
sumOfDivisors += divisor; // Ajoute le diviseur à la somme
}
}
// Vérifie si la somme des diviseurs est égale au nombre lui-même
return sumOfDivisors == candidateNumber;
}
}
Exemples d'exécution
2
9653
6 28 496 8128
1
5
Aucun nombre parfait trouvé