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

SAS Base Discussion :

Détecter si un nombre est premier ou pas


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Détecter si un nombre est premier ou pas
    bonjour

    je cherche à réaliser une macro qui détecte si une variable est un nombre premier ou pas

    voila mon code mais il ne marche pas
    merci d'avance

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro dett(nb);
    %let count=0;
    %do i=1 %to &nb ;
     
    %let modul=%sysfunc(mod(&nb,&i));
    %if  &modul. eq 0 %then &count=%eval(&count+1);
    %end;
    %put &count;
    %if &count gt 2 %then %put " &nb pas premier ";
    %else  %put " &nb est premier ";
    %mend;

  2. #2
    Membre expérimenté
    Bonjour,
    Cette solution peut répondre à ta requête (ton code repris et rectifié) à vérifier :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro dett(nb) ;
    %do i=1 %to &nb. ;
    	%do j=2 %to &i.-1 ;
    		%if %sysfunc(mod(&i., &j.)) eq 0 %then %do  ; 
    		%put " &i. n'est pas premier "  ;  %goto leave  ; 
                                                          %end  ;
            %end ;
    %put " &i. est premier ";	
    %leave: ;
    %end ;
    %mend;	%dett(10) ;


    Bon courage
    Ward

  3. #3
    Membre éprouvé
    Bonjour,
    Une autre solution est possible avec la fonction fcmp:
    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
    proc fcmp outlib=work.pack1.MyFunc1;
        function MyFunc1(var$) $10;
           length var1 $10;
     
            do i =2 to int(sqrt(var));
                       if mod(var,i)=0 then do; 
                                                        var1="NbrNPre";
                                                       leave;
                                           end;
                       else do;
                                 var1="NbrPre";
                       end;
            end;
     
           return (var1);
        endsub;
    quit;
     
    data test;
    input a;
    cards;
    34679
    34678
    23456789
    ; run;
     
    options cmplib=work.pack1;
     
    data test1;
    set test;
        result=MyFunc1(a);
    run;


    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia.fr/certifications/session-decembre-2015-niveau-avance?uid=162

###raw>template_hook.ano_emploi###