les nombres premiers en 8 lignes
+3
Urbinou
VieuxBouz1
sidchip_fr
7 participants
GAMOPAT :: PSYCHIATRIE :: LES CODEURS FOUS :: 10LIGNOPAT
Page 1 sur 1
les nombres premiers en 8 lignes
Pour ceux qui ont des souvenirs de leurs cours de math du collège et lycée,voici un petit programme en 8 lignes qui calcule tous les nombres premiers (nombre qui n'a comme diviseurs que 1 ou lui-même)
Le programme n'est pas spécifique au C64 on peut donc l'adapter pour n'importe quel micro en basic.
Ce n'est peut-être pas la façon la plus élégante de faire mais le programme fonctionne :
10 PRINT1;2;3;5;7;
20 N=8:D=2
30 I=N/D
40 IFI=INT(I)THENN=N+1:D=2:GOTO30
50 D=D+1
60 IFD>N/2THEN80
70 GOTO30
80 PRINTN;:N=N+1:D=2:GOTO30
Note : l'affichage des nombres ralentit au fur et à mesure car il faut tester tous les diviseurs
(ou plus exactement tous les diviseurs jusqu'à la moitié du nombre,puisque au dessus de la moitié il ne peut y avoir de diviseur)
autre programme avec test uniquement des nombres impairs :
10 PRINT1;2;3;5;7;
20 N=9:D=3
30 I=N/D
40 IFI=INT(I)THENN=N+2:D=3:GOTO30
50 D=D+1
60 IFD>N/2THEN80
70 GOTO30
80 PRINTN;:N=N+2:D=3:GOTO30
Le programme n'est pas spécifique au C64 on peut donc l'adapter pour n'importe quel micro en basic.
Ce n'est peut-être pas la façon la plus élégante de faire mais le programme fonctionne :
10 PRINT1;2;3;5;7;
20 N=8:D=2
30 I=N/D
40 IFI=INT(I)THENN=N+1:D=2:GOTO30
50 D=D+1
60 IFD>N/2THEN80
70 GOTO30
80 PRINTN;:N=N+1:D=2:GOTO30
Note : l'affichage des nombres ralentit au fur et à mesure car il faut tester tous les diviseurs
(ou plus exactement tous les diviseurs jusqu'à la moitié du nombre,puisque au dessus de la moitié il ne peut y avoir de diviseur)
autre programme avec test uniquement des nombres impairs :
10 PRINT1;2;3;5;7;
20 N=9:D=3
30 I=N/D
40 IFI=INT(I)THENN=N+2:D=3:GOTO30
50 D=D+1
60 IFD>N/2THEN80
70 GOTO30
80 PRINTN;:N=N+2:D=3:GOTO30
Dernière édition par sidchip_fr le Jeu 13 Juil 2023 - 15:04, édité 1 fois
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
Excellent
VieuxBouz1- Patient contaminé
- Nombre de messages : 957
Age : 53
Localisation : Somewhere in Britany
Date d'inscription : 25/02/2023
Re: les nombres premiers en 8 lignes
VieuxBouz1 a écrit:Excellent
Merci à toi,c'est sympa
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
Pour accélérer, tu pourrais te limiter aux nombres impairs, à l’exception de 2, un nombre pair ne sera jamais premier.
Re: les nombres premiers en 8 lignes
Ha ouais tiens ça existe le modulo en basic sur c64 ?
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: les nombres premiers en 8 lignes
Urbinou a écrit:Pour accélérer, tu pourrais te limiter aux nombres impairs, à l’exception de 2, un nombre pair ne sera jamais premier.
c'est ce que teste le programme en premier : si le nombre est divisible par 2,il est pair et donc l'ordinateur passe au nombre suivant
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
lincruste a écrit:Ha ouais tiens ça existe le modulo en basic sur c64 ?
à ma connaissance la fonction modulo n'existe pas dans le basic V2 du C64
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
Pour savoir plus efficacement si un nombre est pair (ou impair), il suffit de checker le dernier bit de poids faible. Bit à 0 c'est pair, bit a 1 c'est impair.
Ou mieux encore, ta boucle qui itère chaque nombre, au lieu incrémenter +1, tu devrais plutôt partit d'un nombre impair comme 9,.et incrémenter de +2.
Ainsi ta boucle ne testera que les nombres impairs. 9, 11, 13,...
Et si je me trompe pas en lisant le code, tu teste de diviser par tous les nombres précédents (enfin disons plutôt par la moitié des nombres).
Tu devrais plutôt tester de diviser uniquement par les nombres premiers trouvés précédemment. Si le nombre n'est jamais divisible, c'est qu'il est premier lui aussi.
Ou mieux encore, ta boucle qui itère chaque nombre, au lieu incrémenter +1, tu devrais plutôt partit d'un nombre impair comme 9,.et incrémenter de +2.
Ainsi ta boucle ne testera que les nombres impairs. 9, 11, 13,...
Et si je me trompe pas en lisant le code, tu teste de diviser par tous les nombres précédents (enfin disons plutôt par la moitié des nombres).
Tu devrais plutôt tester de diviser uniquement par les nombres premiers trouvés précédemment. Si le nombre n'est jamais divisible, c'est qu'il est premier lui aussi.
suisseretrogaming- Infirmier
- Nombre de messages : 3979
Age : 34
Localisation : Suisse
Date d'inscription : 14/09/2013
Re: les nombres premiers en 8 lignes
Après 1 n'est pas considéré comme un nombre premier...
Copper- Docteur *
- Nombre de messages : 7830
Age : 48
Localisation : FRANCE
Date d'inscription : 02/11/2020
Re: les nombres premiers en 8 lignes
sidchip_fr a écrit:lincruste a écrit:Ha ouais tiens ça existe le modulo en basic sur c64 ?
à ma connaissance la fonction modulo n'existe pas dans le basic V2 du C64
Ho ok merci. Et ça marche comment avec ton INT sur un micro 8 bits ? T'es limité à un entier qui vaut 255 ou 32768 ou encore une autre valeur avec ton programme ou bien ça peut continuer autant qu'on veut ?
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: les nombres premiers en 8 lignes
lincruste a écrit:sidchip_fr a écrit:lincruste a écrit:Ha ouais tiens ça existe le modulo en basic sur c64 ?
à ma connaissance la fonction modulo n'existe pas dans le basic V2 du C64
Ho ok merci. Et ça marche comment avec ton INT sur un micro 8 bits ? T'es limité à un entier qui vaut 255 ou 32768 ou encore une autre valeur avec ton programme ou bien ça peut continuer autant qu'on veut ?
INT renvoie la partie entière d'un nombre.J'ai fait quelques tests sous Winvice et apparemment il n'y a pas de limite (pas de problème pour les chiffres supérieurs à 32768)
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
Pas mal du tout. Et tu l'as fait tourner jusqu'à combien et en combien de temps pour avoir une idée ?
lincruste- Interne
- Nombre de messages : 5619
Age : 45
Localisation : RP
Date d'inscription : 07/06/2014
Re: les nombres premiers en 8 lignes
lincruste a écrit:Pas mal du tout. Et tu l'as fait tourner jusqu'à combien et en combien de temps pour avoir une idée ?
Je n'ai pas fait tourner le programme pour répondre à ta question.J'ai juste fait calculer à l'ordinateur un très grand chiffre à virgule avec la fonction INT et il me l'a calculée sans problème (pas de message d'erreur).Par conséquent on peut faire tourner le programme autant de temps qu'on veut ça ne plantera pas.
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
Salut à tous,
J'ai rajouté le programme qui teste uniquement les nombres impairs comme vous me l'avez suggéré.ça fonctionne très bien aussi.J'ai quand même laissé le premier programme avec le test de tous les nombres (pairs et impairs) car j'aime bien l'idée que les nombres soient tous testés (c'est juste une question de goût évidemment)
Je vous remercie à tous pour votre contribution.
J'ai rajouté le programme qui teste uniquement les nombres impairs comme vous me l'avez suggéré.ça fonctionne très bien aussi.J'ai quand même laissé le premier programme avec le test de tous les nombres (pairs et impairs) car j'aime bien l'idée que les nombres soient tous testés (c'est juste une question de goût évidemment)
Je vous remercie à tous pour votre contribution.
sidchip_fr- Patient contaminé
- Nombre de messages : 437
Age : 52
Date d'inscription : 25/05/2008
Re: les nombres premiers en 8 lignes
Il y a une trentaine d'année, j'avais un programme comme celui-ci en basic sur ma sharp pc 1401.
ça ramait à mort au bout de 2 minutes!
ça ramait à mort au bout de 2 minutes!
Putois Blagueur- Patient incurable
- Nombre de messages : 1814
Age : 48
Localisation : Entre Vénus et Mars
Date d'inscription : 10/02/2016
sidchip_fr offre 1 suppo à ce post!
Sujets similaires
» Nombres de jeux sur GB?
» [JEU]Suite de nombres
» [JEU]Suite de nombres
» couleurs sur C64 en 3 lignes
» [JEU]Suite de nombres
» [JEU]Suite de nombres
» [JEU]Suite de nombres
» couleurs sur C64 en 3 lignes
» [JEU]Suite de nombres
GAMOPAT :: PSYCHIATRIE :: LES CODEURS FOUS :: 10LIGNOPAT
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum