PARTIE ALIQUOTE

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 - 5 mai 2008 à 10:24
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 - 6 mai 2008 à 15:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46548-partie-aliquote

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
6 mai 2008 à 15:12
wops c'est

while(!(n%d)) {
puissance_facteurs_premiers[nb]++;
n /= d;
}

et pas

while(!(n%d)) {
puissance_facteurs_premiers[nb]++;
n /= 2;
}
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
6 mai 2008 à 13:29
salut

j'ai recodé ton programme comme je l'aurais fait, à toi de voir si c'est plus clair

#include <stdio.h>

#define MAX 10

void 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;
}
jimonnet Messages postés 10 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 6 mai 2008
6 mai 2008 à 11:19
oui en effet
mais les cas sont tres rare
2 ou 3 inferieur a 10^10
or le logiciel ne depasse pas les 10^10
sans risque de bug

en fait ce bout de programme est le debut d'un autre
que je posterai plus tard car pas au point
et qui ne sera pas penalisé par ce souci
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
5 mai 2008 à 21:21
la fonction diviseurs()

et s'il y a plus que 7 diviseurs ?

exemple 223092870 = 2*3*5*7*11*13*17*19*23
jimonnet Messages postés 10 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 6 mai 2008
5 mai 2008 à 12:21
Ha bon...
lesquels ??
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
5 mai 2008 à 10:24
salut
il y a des trucs un peu bizarres (au niveau algorithmique et clarté) dans ton code!
Rejoignez-nous