Forum Étudiants Cours ASDS

PPCM

PPCM

par RAYANE HAMADOUCHE,
Nombre de réponses : 2
program ppcm;
var a,b,i,q,k,vq,n:integer;
begin
writeln('donner deux nombres entiers);
readln(a,b);
if a>b then n:=a
else n:=b;
vq:=1;
q:=1;
k:=0;
for i:=2 to (n div 2) do {pour gagner des iterations iterations}
begin
    if a mod i=0 then
    begin
    q:=i;
    a:=a div i;
    while a mod i=0 do   {l'idee c'est de faire la meme operation pour le meme i, autrement dit  on peut y avoir le quotient de 'a' est aussi divisible sur le meme i}
    begin
      if a mod i =0 then
      begin
      a:=a div i;
      q:=q*i;
      end;
    end;
    end;
   if b mod i =0 then {c'est la meme chose que a}
   begin
   k:=i;
   b:=b div i;
   while b mod i=0 do
   begin
     if b mod i=0 then
     begin
     b:=b div i;
     k:=k*i;
     end;
   end;
   end;
   if q>=k then vq:=q*vq
   else vq:=k*vq;
   q:=1;                      {on doit reinitialiser le 'q' et le 'k' sinon si a mod i<>0 et b mod i<>0 , il va multiplier vq par k ou q}
   k:=1;
end;
writeln('ppcm= ',vq);
end.                                                                  
Annexe ppcm1.png
Annexe ppcm2.png
Annexe ppcm3.png
En réponse à RAYANE HAMADOUCHE

Re: PPCM

par Ahror BELAID,

C'est bien. Par contre, il y a des répétitions et on peut le coder avec beaucoup moins d'instruction.

Y a t il un volontaire pour publier une version améliorée et  moins longue ?

En réponse à Ahror BELAID

Re: PPCM

par TOUFIK AZZI,

je pense c'est comme ca 

 

program ppcm;

uses crt;

var x,y,z,ppcm:Integer;
begin
clrscr;
Writeln('taper deux nombre positif :');
ReadLn(x,y);
if x>y then
begin
z:=x;
x:=y;
y:=z
end;
ppcm:=x;
while (ppcm mod y<>0) do
ppcm:=ppcm+x;
WriteLn('ppcm =',ppcm);
end.

Annexe B399B0AC-C956-4E01-B2F1-737914132D60.png