Télécharger le zip
salutil y a des trucs un peu bizarres (au niveau algorithmique et clarté) dans ton code!
Ha bon...lesquels ??
la fonction diviseurs()et s'il y a plus que 7 diviseurs ?exemple 223092870 = 2*3*5*7*11*13*17*19*23
oui en effetmais les cas sont tres rare2 ou 3 inferieur a 10^10or le logiciel ne depasse pas les 10^10sans risque de bugen fait ce bout de programme est le debut d'un autreque je posterai plus tard car pas au pointet qui ne sera pas penalisé par ce souci
salutj'ai recodé ton programme comme je l'aurais fait, à toi de voir si c'est plus clair#include <stdio.h>#define MAX 10void decomposer(int n, int *facteurs_premiers, int *puissance_facteurs_premiers, int *nombre_facteurs_premiers) { int nb = 0, d = 3; printf("%d = ",n); if (!(n%2)) { facteurs_premiers[0] = 2; puissance_facteurs_premiers[0] = 1; n /= 2; while(!(n%2)) { puissance_facteurs_premiers[0]++; n /= 2; } printf("2^%d * ", puissance_facteurs_premiers[0]); nb = 1; } while(n != 1) { if (!(n%d)) { facteurs_premiers[nb] = d; puissance_facteurs_premiers[nb] = 1; n /= d; while(!(n%d)) { puissance_facteurs_premiers[nb]++; n /= 2; } printf("%d^%d * ", d, puissance_facteurs_premiers[nb]); nb++; } d += 2; } *nombre_facteurs_premiers = nb;}void enumerer_diviseurs(int *facteurs_premiers, int *puissance_facteurs_premiers, int nombre_facteurs_premiers, int diviseur, int *somme_diviseurs) { int i; if (nombre_facteurs_premiers == 0) { *somme_diviseurs += diviseur; printf("%d\n", diviseur); return; } for (i = 0; i <= *puissance_facteurs_premiers; i++) { enumerer_diviseurs(facteurs_premiers+1,puissance_facteurs_premiers+1, nombre_facteurs_premiers-1,diviseur,somme_diviseurs); diviseur *= *facteurs_premiers; }}int main(int argc, char* argv[]){ int facteurs_premiers[MAX],puissance_facteurs_premiers[MAX],nombre_facteurs_premiers, Nombre, somme_diviseurs; while(1) { printf("Veuillez entrer le nombre a decomposer \n"); scanf("%d",&Nombre); printf("\n"); decomposer(Nombre,facteurs_premiers, puissance_facteurs_premiers, &nombre_facteurs_premiers); somme_diviseurs = 0; printf("\ndiviseurs:\n"); enumerer_diviseurs(facteurs_premiers, puissance_facteurs_premiers, nombre_facteurs_premiers, 1, &somme_diviseurs); printf("\n\nLa partie Aliquote du nombre est %ld",somme_diviseurs); printf("\n\n"); } return 0;}
wops c'est while(!(n%d)) { puissance_facteurs_premiers[nb]++; n /= d;}et paswhile(!(n%d)) { puissance_facteurs_premiers[nb]++; n /= 2;}
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 871 945 membres 21 nouveaux aujourd'hui 16 147 membres club