Décomposition d'un nombre en facteurs premiers

Soyez le premier à donner votre avis sur cette source.

Vue 15 934 fois - Téléchargée 781 fois

Description

Ce code décompose un nombre en produit de facteurs premiers. Cette décomposition existe est est unique pour tout entier naturel différent de 1 et de 0. Cette décomposition peut etre utilisée pour trouver l'enssemble des diviseurs de ce nombre, le nombre de diviseurs qu'il possede... le code identifie tout d'abord l'enssemble des nombres premiers compris entre 2 et le nombre capable de diviser ce nombre c'est à dire inférieur à sa racine (cf démonstration du programme "liste les nombres premiers"). puis il cherche si ce le nombre premier trouver divise notre nombre de départ et ainsi identifie les diviseurs premiers assez simplement.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
99
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
20 août 2008

Attention, j'ai mélangé dans les lettres: t, a, etc...corrige...

Et tu comprends, Julien que:
1)
dim a as variant
Variant attrape tout, même "12mlip"; a est alors déclaré, mais bon, on peut modifier comme tu le dis.
Pas décalré = variant on me dit toujours !C'est idem !
2)
a =text1.text
v = val(text1.text)
F = Fix(val(text.text))

Ma NOUVELLE IDée que: a v F 'alors va au programme, ta saisie est bonne...

Cette double égalité correspond à la nécessité pour que la saisie soit un nombre entier !
C'est mathématique, non ?
.....
RE-VOICI, puisque tu n'as pas reçu le message privé...

On Error Resume Next
Dim a As Variant: Dim v As Double: Dim F As Double

a = Text1.Text ' a est variant donc attrape -tout ???
v = Val(Text1.Text)
F = Fix(Val(Text1.Text))

If a v And v F And v <> 1 And v <> 0 Then
Label1.Caption a: Label2.Visible True (Ou label1.caption = text1.text, si tu veux, mais je vois que ça marche!)
Else
Label1.Caption "Entrez un entier positif différent de 1 et 0": Label2.Visible False
Exit Sub
End If
If v < 0 Then
Label1.Caption "Entrez un entier positif. ": Label2.Visible False
Exit Sub
End If

Programme:

'Text1.Text = a
'enleve les valeurs incorrectes que peut prendre le texte ( 1,2 ou frz...)

For n = 2 To a
DoEvents

For i = 2 To Sqr(n) + 1
DoEvents

If (n And 1) = 0 Then
Exit For
End If

If n Mod (2 * i - 1) = 0 Then
Exit For

End If

Next i

If i > Sqr(n) Then
If a / n = Fix(a / n) Then
'Si le nombre est divisible par n qui est premier
a = a / n
'Alors on le remplace a
List1.AddItem (n)
'et n fait partie des diviseurs premiers de n
n = n - 1
'cette derniere opération permet de chercher le nombres de n nécéssaires à la décomposition (exemple n=8 décomposition 2*2*2) sans cette derniere opération le résultat est juste que si les coefficients de tout les n sont 1
End If
End If

Next n

a = Label1.Caption
'sa s'est juste pour que text1 redevienne ce qu'il était au départ et c'est pour toi SDan qui ne comprenais pas pourqu
Messages postés
99
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
20 août 2008

J'ai fait fait un petit progr. de tests:
1-XP paramétré virgule:
a) text 2,6 ; Val 2; Fix =2 donc Val ne sait pas lire 2,6
b) Text 2.6 ; Val 2,6 ; fix 2. Là, Val lit le point décimal et transcrit en virgule 2,6.

2-XP paramétré point:

a) text 2,6 ;val 2 fix2 val = fix; Val ne lira pas 2,6 numérique
b) text 2.6 ; val =2.6 et Fix = 2

Conclusion 1 :
Val sait lire que le point décimal qq. soit le paramétrage.
Val sait écrire 2.6 en 2,6 en paramétrage virgule

Donc Val sait écrire le décimal virgule (paramétrage virgule de XP), Mais ne sait jamais lire le décimal virgule.(2,6)

Pour bloquer une saisie décimale, il me semble que, le plus simple : satisfaire la double égalité:

If Text1.text val(text1.text) Fix(val(text1.text))then
aller au programme (goto)
else
"Message entrez un entier"
exit sub
End If
exit sub

Car attention, avec 2,6 on a:
val(text1.text) = Fix(Val(text1.text))

val donnant 2 dans tout paramétrage de Windows.

Il me semble avoir trouvé..voir ???
Lisa

J'ai fait ceci :

Private Sub Command1_Click()
Dim a As Variant 'ceci un programme test en observant les réponses
Dim q As Single
Dim v As Double
Dim f As Integer
a Text1.Text: Label4.Caption a
v Val(Text1.Text): Label6.Caption v
f Fix(Val(Text1.Text)): Label8.Caption f
Label10.Caption = 9 / 2 'teste le paramétrage Windows point ou virgule

End Sub
Messages postés
99
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
20 août 2008

Julien et ceux qui lisent; :

Mon idée de stopper l'entrée de tout décimal, point ou virgule a un hic ! J'ai trouvé où ça coince et je recopie ici.

Info pour les débutants comme moi :

Dans un programme d'entiers, pour éliminer sans bug les entrées décimales, tel 4.21 et aussi 4,21 j'avais trouvé ceci :

dim a as double

if val(text1.text) <> Text1.text or Fix(a) <> a then
label1.caption= "Vous devez Entrer un entier"
exit sub
end if

Ainsi avec 2.6 ou 2,6 sur mon PC ça marche dans les deux cas, mais pas sur le second PC qui dit "Type incompatible", pour 2.6 mais marche dans l'autre cas.
La raison simple, je vois:
le second PC a pour symbole décimal dans Windows la virgule et le premier le point.

Avec le point, Windows, donc VB, comprend bien le programme dans les deux cas. La virgule est logiquement considérée comme du texte par VAL.
Mais dans le cas inverse de paramétrage virgule, le point est refusé par Windows et pas considéré comme du texte par VAL comme il le devrait !
Une incohérence de Windows et de VB6...

Et mon problème n'est pas résolu pour tout PC.

Si vous avez un truc simple ? Merci !
Lisa
Messages postés
99
Date d'inscription
jeudi 17 février 2005
Statut
Membre
Dernière intervention
20 août 2008

Je vais essayer 10 pour les nombres premiers, très utile! Je prends, j'ai pas ça !
Je t'ai écrit sur ma source, que tu essaies mon truc et que tu me dises! Un grand service, merci !Au fait ici, tu peux stopper l'entrée (aussi) des nombres négatifs ?
En début de programme:
If a<0 then label5.caption =" Entrez des entiers positifs ! ": exit sub

(C'est du basic, sauf que on met print "..." au lieu du label et un goto vers étiquette en fin de code.). Pas loin du VB, hein ?

Et tu pouvais faire suivre de ma condition pour larguer les décimaux x,n... et les x.n...
Si elle est confirmée, ma procédure, justement à étudier par un + fort que moi en VB !
Ce que je demande...

erci pour tout!
Bizz
Lisa
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
304
La note n'était pas si sévere que sa c'est pas extraordinaire ce code mais bon sa fait toujours plaisir d'avoir une bonne note.
Merci, bon courage pour tes programmes.
Afficher les 12 commentaires

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.