Factorisation d'un nombre

Contenu du snippet

Ce petit programme en C++ (euh, si on veut quoi...) permet de décomposer/factoriser un nombre entier en produit de nombres premiers.
Il écrit alors la factorisation dans la console et dans un fichier nommé sortie.txt, ce qui peut être utile si l'on souhaite stocker les factorisations de plusieurs nombres.
J'ai remarqué qu'il y a plusieurs sources déjà postées sur ce sujet, mais celle-ci est plutôt courte et minimaliste (le bloc final qui prend pas mal de place sert juste à formater...)
Ce programme tourne bien sous Ubuntu (compilé avec Code::blocks)

Source / Exemple :


/************************************************************************

    • **
    • © Faibbus H. Team **
    • Mercredi 2o Février 2oo8 **
                                                                                                                                                  • /
#include <iostream> #include <fstream> #define NBR_DIV_MAX 50 using namespace std; int main() { ofstream fichier("sortie.txt"); // Fichier de sortie int oOoOo=1; // variable permettant de savoir si on doit arrêter le programme unsigned long long produit; // Nombre à factoriser unsigned long long diviseurs[NBR_DIV_MAX][2]; // tableau contenant les facteurs premiers et leur multiplicité for(int i=1;i<NBR_DIV_MAX;i++) // on initialise le tableau, pour faire bonne mesure ^^ { diviseurs[i][0]=1; diviseurs[i][1]=0; } fichier << "*** Nouvelle session ***"; // ça sert à rien mais bon ^^ while(oOoOo) { system("clear"); // Si vous avez window$$, c'est system("cls"); beurk cout << "Faibbus H.Team is proud to present his\n\n\t\t\t\tFaKtoR PrOgRaMmE...\n\n Nombre à factoriser ?" << endl; fichier << "\n"; cin >> produit; // On récupère le nombre à factoriser unsigned long long reste=produit, impair=2; // impair va passer succésivement les nombres impairs... int cpt=1, exp=0; while((reste>1)&&(reste>=impair*impair)) // On boucle tant que le reste n'est pas premier { if (!(reste%impair)) // Si on peut diviser reste par impair { diviseurs[cpt][0]=impair; while(!(reste%impair)) // Ben on le divise :D { exp++; // Au passage, on tient compte de la multiplicité du facteur, ça peut servir... reste=reste/impair; } diviseurs[cpt][1]=exp; exp=0; cpt++; } if(impair==2){ impair--; } // ça par contre, c'est moche mais bon... impair+=2; } cout <<" " << produit << "= 1"; // Les lignes en dessous ne servent qu'à mettre en forme l'affichage fichier << produit << "= 1"; for (int i=1;i<cpt;i++) { cout << "x"<< diviseurs[i][0] ; fichier << "x"<< diviseurs[i][0] ; if(diviseurs[i][1]-1) { cout<< "^" << diviseurs[i][1]; fichier<< "^" << diviseurs[i][1];} } if (reste!=1) { cout << "×" << reste; fichier << "×" << reste; } cout << "\n\n\n\n\t Continuer (0=quitter) ?\n\t\t "; // ça vous a plus ? ben on rejoue... cin >> oOoOo; } return 0; } // © Faibbus H. Team, all rights Left...

Conclusion :


Vu la tartine que j'ai mis dans la description, je vais pas en rajouter ^^
Si ce n'est un grand merci à Jimonnet pour l'erreur qu'il m'a signalé

A voir également

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.