Nombre premier avec recursivité

AMOULA_info Messages postés 3 Statut Membre -  
 timo -
Bonjour,
j'ai d'autres problemes avec la recursivité!!!
je veux savoir comment tester si un nombre n est premier ou non avec la methode recursive et la decomposition en facteur premier et les nombres parfaits...
merci pour votre aide( si je trouve une solution moi même je vais la poster )
Configuration: Windows XP
Internet Explorer 6.0

12 réponses

  1. gafi Messages postés 7 Statut Membre 4
     
    as tu la solution du nombre parfait
    et merci
    3
  2. sonya
     
    bonsoir,pour la solution de la decomposition en facteur premier la voila:

    procedure fact_prem(n,i:integer);
    begin
    if(n=1) then writeln(1);
    if (n mod i=0) then
    begin
    writeln(i,'*');
    if (i<n) then
    fact_prem(n div i,i);
    end
    else if (i<n) then fact_prem(n,i+1)
    end;

    NB:l'appel dans le progrmme principal se fait avec fact_prem(n,2)
    1
  3. gafi Messages postés 7 Statut Membre 4
     
    j'ai les meme pbmes j'ai une solution mais pas trops juste tu peux la voir avec moi
    program parfAIT;
    uses wincrt;
    var n,x:integer;

    function sommediv(n,x:integer):integer;
    begin

    if x=0 then sommediv:=0
    else
    if n mod x=0 then
    sommediv:=sommediv(n,x-1)+x
    else
    sommediv:=sommediv(n,x-1)+0;
    end;

    function verif(n:integer):boolean;

    begin
    if n=sommediv(n,x) then
    verif:=true
    else
    verif:=false;
    end;
    begin
    writeln('n');
    readln(n);
    X:=n div 2;
    if verif(n) =true then write('parfait')
    else
    write('non PARFAIT');
    end.
    0
  4. sonya
     
    bonjour,
    au fait moi je crois que j'ai une autre solution mais il y a un petit problème de syntaxe vous pouvez la voir?:
    function nb_prem(n,x:integer):boolean;
    begin
    if (x<n) then begin if (n mod x=0)then nb_prem:=false
    else nb_prem:=nb_prem(n,x+1);
    end;
    else nb_prem:=true;
    end;
    si vous trouvez l'erreur merci de me la signaler
    @+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. gafi Messages postés 7 Statut Membre 4
     
    bonjour
    voila la correction syntaxique( en faite toujour avant le else il n'ya pas de pt virgule}
    et merci
    pour ta solution
    function nb_prem(n,x:integer):boolean;
    begin
    if (x<n) then
    begin
    if (n mod x=0)then
    nb_prem:=false
    else
    nb_prem:=nb_prem(n,x+1);
    end
    else nb_prem:=true;
    end;
    au niveau du pgme principale tu dois commencer x à 2
    begin
    writeln('n');
    readln(n);
    x:=2;
    if nb_prem(n,x) =true then write('PREMIER')
    else
    write('non PREMIER');
    end.
    0
  7. sonya
     
    pour te repondre je dois savoir ce que c'est qu'un nombre parfait??
    0
  8. gafi Messages postés 7 Statut Membre 4
     
    un nombre parfait est un nombre qui est egale à la somme de ses diviseurs sauf lui meme
    exemple 6 est parfait car 6=1+2+3
    et merci
    0
  9. sonya89
     
    salu,voici ce que j'ai impovisé mais je te previens çane tourne pas correctement:

    program nbr_parf;
    uses wincrt;
    var
    s,i,n:integer;
    b:boolean;

    procedure somme(var s,i:integer);
    begin
    s:=s+i;
    end;

    procedure parfait( n,i:integer );
    begin
    if (i>0) then
    begin
    if (n mod i=0) then somme(s,i);
    parfait(n,i-1);
    end;
    end;

    procedure verif(var b:boolean);
    begin
    somme(s,i);
    parfait(n,i);
    if (s=n)then b:=true
    else b:=false
    end;

    BEGIN
    writeln('donner un entier');readln(n);
    verif(b);
    if (b=true) then writeln('premier')
    else writeln('n"est pas premier');
    END.
    0
  10. sonya89
     
    tu m'exusera les fautes de frappe c'est parceque je suis vraiment exténuée,merci
    0
  11. sonya89 Messages postés 11 Statut Membre
     
    mon cher,je viens juste de m'aperçevoir de ta solution publiée le 16 décembre:

    program parfAIT;
    uses wincrt;
    var n,x:integer;

    function sommediv(n,x:integer):integer;
    begin

    if x=0 then sommediv:=0
    else
    if n mod x=0 then
    sommediv:=sommediv(n,x-1)+x
    else
    sommediv:=sommediv(n,x-1)+0;
    end;

    function verif(n:integer):boolean;

    begin
    if n=sommediv(n,x) then
    verif:=true
    else
    verif:=false;
    end;
    begin
    writeln('n');
    readln(n);
    X:=n div 2;
    if verif(n) =true then write('parfait')
    else
    write('non PARFAIT');
    end.

    eh ben,ça tourne!!
    0
  12. gafi Messages postés 7 Statut Membre 4
     
    en faite la fonction parfait doit retourner vrai ou faux
    voila la solution
    program parfAITs;
    uses wincrt;
    var a,n,x,s:integer;

    function parfait(n,x,s:integer):boolean;

    begin
    if x<=n div 2 then
    if n mod x=0 then
    begin
    s:=s+x;
    if s=n then
    parfait:=true;
    parfait:=parfait(n,x+1,s);
    end
    else
    parfait:=parfait(n,x+1,s)
    else
    if (x>n div 2) and(s<>n) then
    parfait:=false;
    end;
    begin

    for a :=1 to 1000 do
    begin
    X:=1;s:=0;
    if parfait(a,x,s) =true then writeln(a)
    end;
    end.
    0
    1. timo
       
      pour savoir si un nombre est parfait ou non voila le programme
      #include <stdio.h>
      #include<conio.h>
      main ()
      {
      int n,i,s;

      printf("entrer un nombre ");
      scanf("%d",&n);
      i=1; s=0
      while(i<=n/2)
      {
      if(n%i==0)
      {
      s=s+i;
      }
      i++;
      }
      if(s==n)
      printf("le nombre est parfait");
      else
      printf("il ne l'est pas ");
      getch();
      }
      0