A SUPPRIMER

MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007 - 8 mai 2005 à 19:36
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 12 mai 2005 à 22:17
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/31279-a-supprimer

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 mai 2005 à 22:17
Allons bon ! Allons bon !

JE vais pas détailler par le menu vos remarques. JE pense qu'un lecteur attentif et averti saura comprendre les faiblesses et les ambiguïtés de vos remarques... JE vois surtout l'urgence pour moi, de faire une explication détaillée, qui permettra à tout un chacun d'étudier plus facilement mon code, pour en trouver ces points faibles (personne n'est parfait)...



Amicalement,
Us.



PS : Le terme "bout de code" n'avais pas de connotation péjorative, mais plutôt affective...
Chrysostome Messages postés 121 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 14 octobre 2016
12 mai 2005 à 10:36
Désolé, mon post s"adresser au:
http://www.vbfrance.com/codes/NOMBRES_PREMIERS__VRAI_OU_FAUX_/31121.aspx
où l'on était en recherche de vitesse de calcul,on voit que ce n'est pas ton but, donc, je n'ai fait qu'un bout de code pour émettre une piste de développement.
Je te remercie de la leçon sur le "petit théorème de Fermat", mais j'avais pris la précaution de faire suivre ma citation d'un point d'interrogation, car en fait, je me demandais si la formulation:
tout nombre entier est de la forme 4n±1
n'était pas déduite du "petit théorème de Fermat", faisant appel à mes lointains souvenirs.
En ce qui concerne l'utilisation de variant, tu verras lorsque tu seras un peu plus vieux (104 ans!), que cela permet une certaine souplesse, comme pouvoir dépasser 2 147 483 647, je te renvois vers Microsoft Visual Basic Aide:

"...Cependant, si une opération arithmétique est exécutée sur une donnée de type Variant contenant une valeur de type Byte, Integer, Long ou Single et si le résultat excède la plage de valeurs du type de données, le résultat se voit automatiquement affecté le type de données Variant immédiatement supérieur. Une donnée de type Byte est transformée en Integer, une donnée de type Integer est transformée en Long et une donnée de type Long ou Single en Double..."
En ce qui concerne l'utilisation de la formule 6n±1, il faut que n >3, ce qui sous-entend de traiter avant les valeurs de 2 et 3, donc, de ralentir

En conclusion, car il va falloir que je gagne ma pitance en développant des bouts de code, je te prie de bien vouloir accepter les félicitations d'un humble développeur pour ton grand et magnifique code.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 mai 2005 à 23:26
Allons bon !

Disons rapidement, que le Théorème de Fermat est appelé pour les nombres premiers "le petit théorème de Fermat" (1640). IL permet de tester la primalité d'un nombre. Notons, que ce n'est pas le but de ton bout de code...

De plus, a et b, sont en Variant, alors qu'on fait que des calculs avec... Donc un type Long ou Double serait d'entrer de jeu meilleur... ET sans rentrer dans le détail, la conclusion de ton programme c'est de donner une décomposition du nombre NbBase... (A noter, qu'il faut rajouter un moyen d'entrer cette valeur)... ET par exemple ton bout de code renvoit : 10000=(2^4)x5x25x5. Ce qui est juste en terme de calcul, mais assez curieux en terme de présentation du résultat... JE ne peux que renvoyer le lecteur au post : http://www.vbfrance.com/codes/DECOMPOSITION_FACTEURS_PREMIERS/31260.aspx pour un bon algorithme dédié à ce type de problème... ou mieux bien, le mien aprés tout...


Pour continuer, la forme d'un nombre premier peut-être 4n ± 1, mais mieux 6n ± 1... Ce qui permet directement de gagner du temps dans ton algorithme... Mais si on cherche à optimiser on trouvera qlq chose de similaire à mon algorithme NbDiv... Et pour les lecteurs qui voudrait mieux comprendre et trouver des éléments de réponse, (en attendant que je fasse une explication détaillée) je propose la lecture des posts de mon algorithme http://www.vbfrance.com/codes/NOMBRES_PREMIERS__VRAI_OU_FAUX_/31121.aspx
ou j'ai progressivement élaboré l'idée (non finalisé)d'une généralisation des "sauts", avec le soutien de Mindiell... (Re-merçi, au passage...)


Sur ce...

A+
Us.
Chrysostome Messages postés 121 Date d'inscription vendredi 17 octobre 2003 Statut Membre Dernière intervention 14 octobre 2016
11 mai 2005 à 16:36
Voici un autre solution qui apporte plus de rapidité, je pense. Elle utilise le théorème :

Tout Nombre Premier est de la forme 4n±1.

Dim a As Variant ' Nombre à traiter
Dim b As Variant ' Nombre à traiter
Dim np As Integer ' puissance de 2
Dim res As String ' résultat

res = ""
a = NbBase ' Nombre de base

' traitement des puissances de 2
While a Mod 2 = 0
np = np + 1
a = a / 2
Wend
' enregistrement du résultat
Select Case np
Case 1
res = "2"
Case Is > 1
res = "(2 ^ " & np & ")"
End Select
' Diminution du Nombre de Base.
b = NbBase / (2 ^ np)
a = Int(Sqr(a)) + 4 - Int(Sqr(a) Mod 4)
' Application du Théorème (de Fermat?) Tout Nb Premier est de la forme 4n ± 1.
For i = 4 To a Step 4
If b Mod (i - 1) = 0 Then
res = res & " x " & (i - 1)
b = b / (i - 1)
End If
If b Mod (i + 1) = 0 Then
res = res & " x " & (i + 1)
b = b / (i + 1)
End If
Next i
' Publication du résultat.À améliorer. Decomp étant une étiquette.
If res = "" Then
Decomp.Caption = NbBase & " est un Nombre Premier!"
Else
If Left(res, 1) " " Then res Right(res, Len(res) - 2)
Decomp.Caption NbBase & " " & res & " x " & b
End If

Encore bravo pour tous ceux qui s'intéressent aux Maths dans ce qu'ils ont de plus esthétiques.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 mai 2005 à 00:00
Aprés vérification, ton conseil donne un p'tit qlq chose plus rapide...

Merçi.

Us.
Mindiell Messages postés 558 Date d'inscription jeudi 25 juillet 2002 Statut Membre Dernière intervention 5 septembre 2007 1
9 mai 2005 à 10:09
Tu sais que tu pars toujours de 0 là :
For t = 0 To bs
tt = 30 * t

Je te conseillerais donc :
tt = 0
For t=0 To bs
.....
tt = tt + 30
Next t

Ca t'évite des multiplications... A tester
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 mai 2005 à 20:05
Si... si... il faut critiquer ! C'est pour ça que je mets ce code en ligne... J'ai pas la science infuse, donc s'il y a des remarques ou des suggestions, je suis preneur...

Pour NbDiv, si tu as une proposition, tant mieux... Juste faire attention à ne pas ralentir la fonction, qui est la base même des appels de Np2... La répétition ici, c'est aussi un moyen assez sur d'éviter des calculs dans une boucle intermédiaire qui est souvent pénalisant... mais bon, je n'ai pas regardé en détail... alors... si tu trouves mieux....



Amicalement,
Us.
MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007
8 mai 2005 à 19:36
C'est bien d'avoir regroupé ces quatre fonctions en une, ça nous fait une fonction très complète !
Au niveau du code, je ne peux pas encore me permettre de critiquer, mais je constate que la fonction NbDiv est assez répétive, et peut etre optimisable, je me trompe ?

A+
MaX_62