NOMBRES PREMIERS

cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010 - 19 déc. 2006 à 22:33
matovitch Messages postés 31 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 19 avril 2009 - 4 août 2007 à 19:16
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/40781-nombres-premiers

matovitch Messages postés 31 Date d'inscription jeudi 2 août 2007 Statut Membre Dernière intervention 19 avril 2009
4 août 2007 à 19:16
Salut !
Je suis arrivé un peux tard pour les commementaires...:(
Tu divise par 2 (je crois que us_30 a oublié de le dire...) puis par tout les impairs < = à l'entier (inférieur) de la racine.
Attention préciser que 1 n'est pas premier !

Bon Prog !Voic quelques idée :

* Quand le nombre n'est pas premier donner son diviseur et le factoriser en produit de nombres premier...
* Et enfin donner le nombre d'itération et le temps...

7/10

PS : j'ai fait un tel programme sur Casio 35 + !Performance : 16.3 sec pour demontrer que 4521683 est divisible par 677...pas rapide ^^
MLH19 Messages postés 4 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 25 janvier 2007
15 janv. 2007 à 09:33
Bonjour,

Merci pour cette amélioration.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 janv. 2007 à 22:31
Bonsoir,

Pour ne pas avoir à traiter de nombre décimal, on peut plus simplement écrire :
N = Val(Form1.txtPremier.Text)
Ensuite pour aller un peu plus vite, on peut dans la boucle While, faire une incrémentation par 2 "i=i+2" en prenant garde que i n'est pas pair, sinon faire +1 pour la première fois...

Amicalement,
Us.
MLH19 Messages postés 4 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 25 janvier 2007
21 déc. 2006 à 14:17
Bonjour CHAIBAT,

Tu as raison ; je vais limiter la boucle à la racine carrée...c'est suffisant.
Merci pour cette remise à l'ordre mathématique.
En plus ça va permettre au programme de moins "travailler".
A plus.
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 déc. 2006 à 13:31
ce qui est sûr c' est qu' il suffit de se limiter
à la racine carrée de N :
While (i < Sqr(N) And ((N Mod i)<>0)
c' est plus court...
Exemple avec 41 : au lieu de 20, le test s' arrêtera à 6.
car :
s' il n' est pas divisible par 7, il ne le sera pas par 14.
" " 8 " " 16
" " 9 " " 18.
En plus s' il n' est pas divisible par 2 il ne le sera pas par 8.
même chose pour 9 et 3
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 déc. 2006 à 12:30
Bonjour,

Vérifie cette affirmation pour voir.
je n' en suis pas sûr, mais je crois l' avoir
lu quelque part, il y' a lontemps de ça:
"Tout les nombres <=7, et qui ne sont pas divisibles...
par 2 sont premiers
Pour les nombres >7, est premier
celui qui n' est divisible :
ni par 2, ni par 3, ni par 5, ni par 7."

On parle bien sûr de division entière.

A+
MLH19 Messages postés 4 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 25 janvier 2007
21 déc. 2006 à 09:33
Bonjour,

Merci Yves pour cette remarque.
Je débute, tout conseil est le bien venu. Merci encore.
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
19 déc. 2006 à 22:33
Attention tu confonds les types de variables. N est un long et tu y enregistres du string, tu dois normalement convertir ce type de données. I ne devrait pas être déclaré double mais Long, c'est un entier tu l'incrémentes de 1 à chaque fois.
Rejoignez-nous