Identification des nombres parfaits en Java

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é

Étiquettes: Java Algorithme Nombres parfaits Diviseurs

Publié le 27 octobre à 22h46