IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Nombres premiers Algo/JS


Sujet :

JavaScript

  1. #1
    Membre � l'essai
    Homme Profil pro
    Lyc�en
    Inscrit en
    Novembre 2017
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 23
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : Lyc�en

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par d�faut Nombres premiers Algo/JS
    Bonjour
    j''ai cree un algo qui permet d'afficher les nombres premiers de 1 � 100 ,
    voivi l'algo
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    VARIABLES
      i EST_DU_TYPE NOMBRE
      b EST_DU_TYPE NOMBRE
      c EST_DU_TYPE NOMBRE
    DEBUT_ALGORITHME
      POUR i ALLANT_DE 1 A 100
        DEBUT_POUR
        b PREND_LA_VALEUR 0
        POUR c ALLANT_DE 2 A (sqrt(i))
          DEBUT_POUR
          SI (i%c == 0) ALORS
            DEBUT_SI
            b PREND_LA_VALEUR 1
            FIN_SI
          FIN_POUR
        SI (b == 0) ALORS
          DEBUT_SI
          AFFICHER* i
          FIN_SI
        FIN_POUR
    FIN_ALGORITHME
    et j'ai essay� de resaisir le meme code sous JS mais sans resultats. il ne fonctionne pas

  2. #2
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Citation Envoy� par Popo3005 Voir le message
    il ne fonctionne pas
    Avec �a on est bien avanc�s. Si tu nous montrais ce que tu as essay�, et les r�sultats que �a a donn� ?
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  3. #3
    Membre � l'essai
    Homme Profil pro
    Lyc�en
    Inscrit en
    Novembre 2017
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 23
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : Lyc�en

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par d�faut
    j'ai essay� �a
    Code HTML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <HTML>
        <BODY>
    	    <SCRIPT type="text/Javascript">
                     for (i=1; i<=100; i++)
                            {for (j=2;j<=(sqrt(i));j++)
                                    {a=i%j;
                                            if (a==0)
                                            {alert("0");
                                            continue;
                                            }
                                            alert(i);
                                    }
                            }       
                    </SCRIPT>
        </BODY>
    </HTML>
    petite pr�cision c'est le code js qui marche pas

  4. #4
    Expert confirm�
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par d�faut
    la fonction "sqrt" n'existe pas. C'est la m�thode "Math.sqrt" qu'il faut utiliser.

  5. #5
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    C�est dommage les d�clarations de variables qui sont parties aux oubliettes� C�est pourtant une bonne habitude � prendre.
    JavaScript est faiblement typ� mais �a ne nous emp�che pas de d�clarer les variables avec var ou let.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    let i, j, a;
    for (i=1; ... // etc
    Le mode strict permet de rep�rer rapidement les variables qui n�ont pas �t� d�clar�es. Si tu d�butes en JS, je te conseille fortement d�adopter imm�diatement le mode strict pour tous tes projets. Crois-moi, �a te rendra la vie plus facile

    alert c�est sympa mais �a interromp l�ex�cution et �a requiert � chaque fois une intervention � la main pour continuer. Pour d�boguer des scripts plus longs, �a se r�v�le vite fastidieux. Remplace tous les alert par des console.log puis ouvre la console de ton navigateur avec F12. Tu verras, c�est bien plus pratique
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  6. #6
    Membre � l'essai
    Homme Profil pro
    Lyc�en
    Inscrit en
    Novembre 2017
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 23
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : Lyc�en

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par d�faut
    c'est vrai qu'avec console.log c�est bien plus pratique.
    J'ai autre probl�me
    ce script
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <HTML>
        <BODY>
    	    <SCRIPT type="text/Javascript">
    		 for (i=2; i<=100; i++)
    			{for (j=2;j<=(Math.sqrt(i));j++)
    				{a=i%j;
    				if (a==0)
    				{alert(i);}}}
    		</SCRIPT>
        </BODY>
    </HTML>
    affiche les nombres non premiers � partir de 4
    mais celui ci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <HTML>
        <BODY>
    	    <SCRIPT type="text/Javascript">
    		 for (i=2; i<=100; i++)
    			{for (j=2;j<=(Math.sqrt(i));j++)
    				{a=i%j;
    				if (a!=0)
    				{alert(i);}}}
    		</SCRIPT>
        </BODY>
    </HTML>
    affiche les nbres premiers tels que 5 ;7 mais il affiche aussi 9;10;16;21
    vous auriez une id�e du probl�me??

  7. #7
    Expert confirm�
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par d�faut
    Ton id�e d�utiliser le modulo est bonne, cependant ton algo ne fait pas exactement ce que tu veux. Il ne d�termine pas les nombres premiers, mais des couples de nombres qui sont premiers entre eux. Et pas tous (par exemple, 10 et 7 sont premiers entre eux mais ton algo ne le d�tecte pas car 7 est sup�rieur � la racine carr�e de 10).

    Avec une toute petite modification dans ton code, tu peux t�en rendre compte :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (i = 2; i <= 100; i++)
    {
      for (j = 2; j <= (Math.sqrt(i)); j++)
      {
        a = i % j;
        if (a != 0)
        {
          console.log(`(${i}, ${j})`);
        }
      }
    }
    (je me suis permis de reformater ton code avec http://jsbeautifier.org/)

    Ce nouveau code affiche en sortie :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    (5, 2) 
    (7, 2) 
    (9, 2) 
    (10, 3) 
    (11, 2) 
    (11, 3) 
    (13, 2) 
    (13, 3) 
    (14, 3) 
    (15, 2) 
    (16, 3) 
    (17, 2)
    ...
    Il faut que tu revoies ton algorithme. Tu vas devoir proc�der par �limination, � la mani�re du crible d��ratosth�ne. En disant �a, j�en ai d�j� trop dit, je vais te laisser chercher
    La FAQ JavaScript � Les cours JavaScript
    Touche F12 = la console → l�outil indispensable pour d�velopper en JavaScript !

  8. #8
    Membre � l'essai
    Homme Profil pro
    Lyc�en
    Inscrit en
    Novembre 2017
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 23
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : Lyc�en

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par d�faut
    Merci bcp de votre aide le crible d'�rasthost�ne j'y avais penser mais l� le travail est bcp plus long.Je ne sais pas si je peux le raccourcir
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    	var nbr_pre =[3,5,7,11,13,17] ,
            length = nbr_pre.length,
    	min = nbr_pre[length-1] + 2,
        max = parseInt(prompt('Nombre maximum :'));  
    for (var nbr = min; nbr < max; nbr += 2) {
        var isPrime = true, moitier = (nbr + 1) / 2;
        for  (var id in nbr_pre) {
            if (!isPrime) {
                break;
            }
            if (nbr_pre[id] < moitier) {
                var reste_nbr = nbr % nbr_pre[id];
                if (reste_nbr == 0) {
                    isPrime = false
                }
            }
            else {
                break;
            }
        }
        if (isPrime) {
            nbr_pre.push(nbr);
        }
    }
     
    for (var id in nbr_pre) {
        console.log(nbr_pre[id]);
    }

  9. #9
    Expert confirm�
    Avatar de ProgElecT
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2004
    Messages
    6 132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 69
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 6 132
    Par d�faut
    Salut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    let nbr, i, j
    for (i = 2; i <= 100; i++)
    {
        nbr = 0;
        for (j = 1; j <= (Math.sqrt(i)); j++)
        {
            if (i % j == 0) {nbr += 1;}
        } //--- for j ---
        if (nbr == 1){console.log(i);}
    } //----- for i ---
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont d�pann�s.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  10. #10
    Membre � l'essai
    Homme Profil pro
    Lyc�en
    Inscrit en
    Novembre 2017
    Messages
    5
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 23
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : Lyc�en

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Par d�faut
    Merci beaucoup pour le script

  11. #11
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    On nous avez donn� cet exercice dans ce forum : ici, voici quelle �tait ma r�ponse : http://jsbin.com/tenaguyage/edit?js,console

    On nous avez pas demand� d'optimiser avec la racine carr�e mais c'est facile � ajouter comme ProgElecT l'a montr�... On pourrait combiner les optimisations en ajoutant un break et unelse au code de ProgElecT...

    Et si on veut du tr�s concis voir la r�ponse de Sylvain...

  12. #12
    Expert confirm�
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Ao�t 2003
    Messages
    3 684
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : danseur

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 3 684
    Par d�faut
    Je me suis r�-int�ress� au probl�me ces derniers jours;

    http://javatwist.imingo.net/premiers.htm

    j'arrive � mon meilleur timing avec ce code:

    Code html : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <html>
    <head>
    <meta charset="iso-8859-1" />
    <title>...</title>
    <style type="text/css">
    #premiers{margin:auto;text-align:center;max-width:500px}
    </style>
    </head> 
    <body>
    <div id="premiers"></div>
    <script> 
    let tab=[2,3,5,7,11,13];
    let i=17;
    console.time("t");
    while(i<1000000){
    if(i%3>0 && i%5>0 && i%7>0 && i%11>0 && i%13>0){
            let n;let j=17;
            while (j*j<=i){if(i%j===0){n=true;break};j+=2;} 
            if(!n){tab.push(i)}};i+=2;};
     
    document.getElementById("premiers").textContent=tab.join(" ")
    console.timeEnd("t"); 
    </script>
    </body> 
    </html>

    - Les conditions sur les 6 premiers nombres premiers permettent de gagner quelques millisecondes non n�gligeables;
    - regrouper les conditions dans une boucle prend plus de temps;
    - Plus ou moins de conditions ponctuelles ont tendance � augmenter le temps;
    - whilefait gagner un peu de temps par rapport � for;
    - une d�cr�mentation avec while ne g�n�re aucun progr�s;
    - tester que le nombre n'est divisible par aucun �l�ment de tab prend plus de temps;
    - etc.

    Et vous, vous en �tes o� en terme d'optimisation ???

  13. #13
    Expert confirm�
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Ao�t 2003
    Messages
    3 684
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activit� : danseur

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 3 684
    Par d�faut
    apr�s nouveaux tests, it�rer sur tab donne de bons r�sultats;

    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    console.time("t");
    let tab=[3,5,7,11,13];
    let i=17;
    while(i!==1000001){
    	if(i%3>0 && i%5>0 && i%7>0 && i%11>0 && i%13>0){
    		let n, j=4;
    		while (tab[j]**2<=i){if(i%tab[j]<1){n=true;break};j++;}	
    		if(!n){tab.push(i)}
    	};
    	i+=2;
    };
    document.getElementById("premiers").textContent=2+" " +tab.join(" ")
    console.timeEnd("t");

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 24
    Dernier message: 27/09/2005, 21h16
  2. [d�fi n�8]: premiers nombres premiers
    Par javatwister dans le forum G�n�ral JavaScript
    R�ponses: 41
    Dernier message: 14/06/2005, 10h22
  3. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    R�ponses: 12
    Dernier message: 18/09/2004, 14h57
  4. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de donn�es
    R�ponses: 3
    Dernier message: 14/04/2004, 19h10
  5. premier nombre premier superieur � m=10^100+1
    Par azman0101 dans le forum Math�matiques
    R�ponses: 4
    Dernier message: 17/04/2003, 03h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo