Nombres parfaits paires : calcul ( tres tres rapide )

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 522 fois - Téléchargée 37 fois

Contenu du snippet

Rappel: Un nombre parfait est un nombres egal à la somme de SES diviseurs propres.
Exemple : 6=1+2+3 28 = 1+2+4+7+14

Cette algo. permet de calculer tout les nombres parfaits paires.
En effet Euler a démontré que tout nombre parfait pair est de la forme 2^n * (2^(n+1) - 1)
où 2^(n+1) -1 est un nombre premier.

Source / Exemple :


'Créer une CommandButton  
'    Propriété :
'            Name : cmdChercher
'            Caption  :"Chercher"
'Créer un TextBox
'    Propriété :
'            Name : txtnbrParfait
'            Multiligne : True
'            Text : Rien du tout

' Et mettez le code suivant :

Private Sub cmdChercher_Click()
 Static OnOff As Boolean
 Static n As Long
 On Error GoTo Erreur

   If n = 0 Then n = 1
   If cmdChercher.Caption = "Chercher" Then
      cmdChercher.Caption = "Pause"
      OnOff = True
      Do
        If IsPrime(2 ^ (n + 1) - 1) Then _
        txtNbrParfait = txtNbrParfait & vbCrLf & 2 ^ n * (2 ^ (n + 1) - 1)
        DoEvents
        n = n + 1
      Loop Until OnOff = False Or InStr(1, Str(n), "E")
   Else
      cmdChercher.Caption = "Chercher"
      OnOff = False
   End If

 Exit Sub
Erreur:
 MsgBox "Malheureusement, la précision des variables n'est pas bonne du tout sous vb ..." & vbCrLf & "On ne peut aller plus loin"
End Sub

Function IsPrime(X As Single) As Boolean
Dim i As Single
 IsPrime = True
 If X = 2 Then Exit Function

 For i = 3 To Int(Sqr(X)) Step 2
     If (X Mod i) = 0 Then IsPrime = False: Exit Function
 Next i

End Function

'Voila. Si ca vous fait chier de tout faire je mettrai un zip.

Conclusion :


ET LES NOMBRES PARFAITS IMPAIRES ???

A l'heure actuel aucun nombre parfait n'est connu.
Mais on sait que s'il en existait un :

--> Il aurait au moins 11 facteurs premiers distincts (Hagis 1983)
--> Il aurait un facteur premier supérieur à 300 000
--> Il serait supérieur a 10^300 (Brent-Cohen-Ricle)

Bonne chance ;)

A voir également

Ajouter un commentaire Commentaire
Messages postés
365
Date d'inscription
vendredi 24 mai 2002
Statut
Membre
Dernière intervention
18 octobre 2004

Vu que VB est assez limité du point de vue des nombres, j'avais voulu le faire avec la bibliothèque BCMath de PHP (gestion des nombres par chaine de caractères) mais, là pour arriver à je ne sais plus quel nombre, il m'a fallu laisser tourner l'ordi plusieurs heures ; finalement j'ai renoncé car il m'aurait fallu des siècles pour arriver à battre le record...
10 pour ce code bien coloré et les explications :)

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.