cs_yvesyves
Messages postés561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010
-
19 déc. 2006 à 22:33
matovitch
Messages postés31Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 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.
matovitch
Messages postés31Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 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és4Date d'inscriptionjeudi 31 août 2006StatutMembreDernière intervention25 janvier 2007 15 janv. 2007 à 09:33
Bonjour,
Merci pour cette amélioration.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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és4Date d'inscriptionjeudi 31 août 2006StatutMembreDernière intervention25 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és1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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és1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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és4Date d'inscriptionjeudi 31 août 2006StatutMembreDernière intervention25 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és561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 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.
4 août 2007 à 19:16
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 ^^
15 janv. 2007 à 09:33
Merci pour cette amélioration.
12 janv. 2007 à 22:31
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.
21 déc. 2006 à 14:17
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.
21 déc. 2006 à 13:31
à 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
21 déc. 2006 à 12:30
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+
21 déc. 2006 à 09:33
Merci Yves pour cette remarque.
Je débute, tout conseil est le bien venu. Merci encore.
19 déc. 2006 à 22:33