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 )
A voir également:

12 réponses

gafi Messages postés 7 Statut Membre 4
 
as tu la solution du nombre parfait
et merci
3
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
sonya
 
merci pour la correction gafi
0
sonya
 
pour te repondre je dois savoir ce que c'est qu'un nombre parfait??
0
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
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
sonya89
 
tu m'exusera les fautes de frappe c'est parceque je suis vraiment exténuée,merci
0
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
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
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