[c/c++] déterminer les diviseurs d'un nombre avec des informations supplémentaire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 551 fois - Téléchargée 18 fois

Contenu du snippet

Un jour j'avais besoin de déterminer les diviseurs d'un groupe de nombres et comme je suis un grand fainéant au lieu de tout calculer manuellement j'ai décider de faire un petit prog, qui me permettez par la même occasion de reprendre un peut la programmation car sa faisait un moment enfin bref voilà le code :

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <limits.h>

using namespace std;

int main(){

    unsigned long nombre = 0;

    while ( true ) {

        fprintf ( stdout, "\n\nEntrer un nombre entier ( < %lu ) : ", LONG_MAX);

        unsigned long somme = 0;

        fflush ( stdin );
        scanf ( "%lu", &nombre );

        fprintf ( stdout, "Resultat :\n" );

        for ( unsigned long i = 1; i <= nombre; i++ ) {

            long double result = (long double)(nombre) / (long double)(i);

            if ( result == (long double) ( (unsigned long) ( result ) ) ) {

                if ( i == nombre || i > (long double) ( result ) )
                    break;

                fprintf ( stdout, "%lu x %lu\n", i,  (unsigned long) ( result ) );

                if ( i == (unsigned long) ( result )  )
                    somme += i;
                else
                    somme += i + (unsigned long) ( result );

            }

        }

        if ( somme >= nombre )
            somme -= nombre;

        fprintf ( stdout, "\nLa somme des diviseurs sans le nombre lui meme est : %lu", somme );

        if ( somme == nombre )
            fprintf ( stdout, "\nC'est un nombre parfait !" );
        if ( somme == 1 )
            fprintf ( stdout, "\nC'est un nombre primaire !" );

    }

    return 0;

}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
79
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2010
6
Oui bien sûr, je manquerez pas d'implémenter le "crible quadratique" si je devez un jour calculer les diviseurs d'un nombre (très) important ! =)

Merci Bacterius.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Evidemment, si c'est juste pour des nombres de l'ordre d'un millier, c'est inutile.
Mais si un jour tu as besoin de factoriser des grands nombres (factoriser = trouver les facteurs/diviseurs), utilise plutôt ceux dont je t'ai parlé (à moins que t'ai 2 milliards d'années devant toi).

Cordialement, Bacterius !
Messages postés
79
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2010
6
Je ne pense pas que cela soit nécessaire car ce code est conçu dans le but de calculer les diviseurs d'un nombre composé de 3-4 chiffres maximum et pas des centaines ...
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Tu peux aussi implémenter le crible quadratique ou le crible spécial de corps de nombres. Tu pourras trouver les diviseurs d'un nombre de 100 chiffres en 30 minutes sur un bon PC. Mais pour l'implémenter, bonjour ... :p

Cordialement, Bacterius !
Messages postés
79
Date d'inscription
mardi 28 novembre 2006
Statut
Membre
Dernière intervention
28 avril 2010
6
Merci circular mais je crois que c'est deja fait, regarde la ligne 28 ;)
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.