Recherche des nombres parfaits

Soyez le premier à donner votre avis sur cette source.

Snippet vu 17 302 fois - Téléchargée 32 fois

Contenu du snippet

ce programme affiche les nombres parfaits compris entre 1 et 10 000.

Source / Exemple :


#include <stdio.h>

#define nmax 10000

void main()
{
int n, somme_diviseur, diviseur;
for(n=1; n<=nmax; n++)
	{
	somme_diviseur=0;
	for(diviseur=1; diviseur<=n/2; diviseur++)
		if(n%diviseur==0)
			somme_diviseur+=diviseur;
	if(somme_diviseur==n)
		printf("%d est un nombre parfait\n", n);
	}
}

A voir également

Ajouter un commentaire

Commentaires

coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
bon, je ne te suis pas mais c'est pas grave, tu dois avoir raison, je vias voir si on peut exploiter ça facilement...
cruchacode
Messages postés
11
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
22 février 2012

Sorry, je m'explique plus clairement : ce n'est pas l'exposant de 2 qui est le facteur premier, mais le facteur premier qui est la somme des puissances de 2 de 0 à l'exp max du facteur 2

Exemple :
3 2^0 + 2^1, 3 est premier> 2^1 * 3 est parfait
7 = 3 + 2^2, est premier 2^2 * 7 est parfait

Et j'insiste, le nombre premier doit être la somme de 1, 2, ... sans "trous" jusqu'au facteur 2^k

Si tu regardes la démonstration, tu comprendras sans doute prourquoi de tels nombres sont NECESSAIREMENT parfaits...

2 termes dont l'un premier, l'autre une puissance (n) de premier ==> nombre de diviseurs propres = n + n-1 + 1
soit 2 n termes.

Etudions les termes,


Nombre premier = (2^(n+1) -1)
Nombre pair alors choisi = 2^n

Diviseurs :
Premier
(2^(n+1) -1)
Puissances de 2 :
(2^(n+1) -1)
Produits des puissances et du premier :
(2^(n) -1) * (2^(n+1) -1)

...mais on ne doit pas compter 2 fois le premier (2^0 = 1..)

Somme des div
(2^(n+1) -1) (1 + (2^(n) -1))
(2^(n+1) -1) * ((2^(n))

La somme des div est donc bien égale au nombre de départ
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
16 = 2^3 * 2 et 2 = 2^1

voila je crois que comme 3 et 2 sont premiers alros 16 est parfait ...
16 != 2 +8 +4 +1

a moins que je ne me trompe 16 n'a pas d'autres diviseurs donc il n'eest pas parfait pourtant, selon ta technique, il dvrait l'être...
cruchacode
Messages postés
11
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
22 février 2012

Tu peux programmer une recherche des nombres parfaits en utilisant ce thm... tu verras que tu trouve exactement les nombres parfaits et eux seuls...

En réfléchissant un peu tu verras aussi combien ce thm est beau !!
chercher un nombre premier somme des puissances de 2 de 0 à n ==> construire un nombre parfait...

De tels nombres premiers sont plutôt rares... 3 en dessous de 1000 et les choses vont en se raréfiant
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
mais la tu peux ariver a nimporte quel nombre pair...

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.