Nombre premier avec recursivité
AMOULA_info
Messages postés
3
Statut
Membre
-
timo -
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 )
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:
- Fonction premier recursive
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
12 réponses
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)
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)
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.
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.
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
@+
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
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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
exemple 6 est parfait car 6=1+2+3
et merci
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.
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.
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!!
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!!
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.
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.
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();
}
#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();
}