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

PL/SQL Oracle Discussion :

Calcul nombre premier


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Avatar de l4r3nZu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 154
    Points : 423
    Points
    423
    Par défaut Calcul nombre premier
    bonjours voici ce que je veux faire :

    Donnez le bloc PL/SQL qui génère la liste des nombres premiers inférieurs à 100

    Voila ce que j'ai implémenté :

    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
     
    SET SERVEROUTPUT ON
     
    CREATE OR REPLACE FUNCTION estPremier (nb number)
    RETURN BOOLEAN
    IS
    BEGIN
    For cur in 2 .. nb-1
    LOOP
      IF MOD(nb,cur)=0 THEN  RETURN FALSE; END IF;
    END LOOP;
    RETURN TRUE;
    END;
     
    DECLARE
    isFirst BOOLEAN:=TRUE;
    BEGIN
    For cur in 1 .. 100
    LOOP
    isFirst := estPremier(cur);
    IF isFirst=TRUE THEN
    dbms_output.put_line (cur||' est une nombre 1er');
    END IF;
    END LOOP;
    END;
    ca me retourne des nombres incorrectes :s et j'arrive pas a trouver l'erreur :s
    quelqu'un aurait une idée ?

    merci d'avance

  2. #2
    Membre averti Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Points : 442
    Points
    442
    Par défaut
    A la première lecture, ça ne paraît pas mal comme code.
    Tu pourrais donner un exemple de nombre incorrect retourné par ton script ?

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    A part le chiffre 1, c'est bon

    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
    DECLARE
     FUNCTION estPremier (nb number)
      RETURN BOOLEAN
      IS
      BEGIN
        FOR cur IN 2 .. nb-1
        LOOP
          IF MOD(nb,cur)=0 THEN  RETURN FALSE; END IF;
        END LOOP;
      RETURN TRUE;
      END;
    BEGIN
    FOR cur IN 1 .. 100
    LOOP
    	IF estPremier(cur)
      THEN
        dbms_output.put (' '|| cur);
      END IF;
    END LOOP;
    	DBMS_OUTPUT.put_line(' '); 
    END;
     
     1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
    Ce que donne Wiki
    2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

  4. #4
    Membre averti
    Avatar de l4r3nZu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2010
    Messages : 154
    Points : 423
    Points
    423
    Par défaut
    Merci beaucoup

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Mieux vaut tard que jamais

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Une version "SQL" juste pour rigoler :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    SQL> with t as (
      2  select level n
      3  from dual
      4  connect by level <= 100)
      5  select *
      6  from t t1
      7  where n > 1
      8    AND not exists (select null
      9                    from t t2
     10                    where t2.n < t1.n
     11                      and t2.n > 1
     12                      and mod(t1.n, t2.n) = 0);
     
             N
    ----------
             2
             3
             5
             7
            11
            13
            17
            19
            23
            29
            31
            37
            41
            43
            47
            53
            59
            61
            67
            71
            73
            79
            83
            89
            97
     
    25 ligne(s) sÚlectionnÚe(s).

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    et une version MODEL pour pacmann

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT x  FROM (
      SELECT * FROM DUAL
      MODEL
      DIMENSION BY (2 x, 2 y)
      MEASURES (2 p)
      (p [FOR x FROM 2 TO 100 INCREMENT 1, FOR y FROM 2 TO 10 INCREMENT 1] =
                          MOD (CV (x), CV (y))))
    HAVING LNNVL (MIN (CASE WHEN y < x THEN p END) = 0)
    GROUP BY x
    ORDER BY x;

  8. #8
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Excellent !
    (Bien vu pour le coup de la racine entre autres )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. multithread pour calcul nombre premier.
    Par fred61 dans le forum C#
    Réponses: 7
    Dernier message: 18/05/2014, 11h20
  2. Nombre premiers et calculer la racine carrée d'un nombre
    Par Roud9 dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 21/09/2010, 17h55
  3. [MASM32] Calcul nombres premiers : l'assemblage ne s'achève pas
    Par Voldemort09 dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 25/09/2008, 22h49
  4. Réponses: 9
    Dernier message: 12/10/2006, 00h36
  5. [LG]Calcul des 15 premiers nombres premiers
    Par yffick dans le forum Langage
    Réponses: 12
    Dernier message: 18/09/2004, 14h57

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