Program S15;
Type
tab = array[1..20] Of integer;
Var
n1,n2,A,B : integer;
T1,T2 : tab;
//*****************************
Procedure lecture(Var A,B:integer);
Begin
Repeat
write('A=');
readln(A);
write('B=');
readln(B);
Until (10 <= A) And (A<=B) And (B<=10000);
End;
//*****************************
Procedure fact_prem(Var t:tab;nb:integer;Var n:integer);
Var
i,x : integer;
Begin
n := 0;
i := 2;
x := nb;
While (i <= nb Div 2) Do
Begin
If x Mod i = 0 Then
Begin
n := n+1;
T[n] := i;
x := x Div i;
End
Else
i := i+1;
End;
End;
//*****************************
Function existe(x:integer;V:tab;d:integer) : boolean;
Var
b : boolean;
i : integer;
Begin
i := 0;
Repeat
i := i+1;
b := x=v[i];
Until (b) Or (i=d);
existe := b;
End;
//*****************************
Function nb_occ(x:integer;v:tab;d:integer) : integer;
Var
i,nb : integer;
Begin
i := 0;
nb := 0;
For i:=1 To d Do
If v[i]=x Then
nb := nb+1;
nb_occ := nb;
End;
//*****************************
Function calcul(t1,t2:tab; n1,n2:integer) : integer;
Var
p,i,j : integer;
Begin
p := 1;
i := 1;
Repeat
If existe(t1[i],t2,n2) Then
Begin
If nb_occ(t1[i],t2,n2)< nb_occ(t1[i],t1,n1) Then
For j:=1 To nb_occ(t1[i],t2,n2) Do
p := p*t1[i]
Else
For j:=1 To nb_occ(t1[i],t1,n1) Do
p := p*t1[i];
i := i+nb_occ(t1[i],t1,n1);
End
Else
i := i+1;
Until i>n1 ;
calcul := p;
End;
//*****************************
Begin
lecture(A,B);
fact_prem(t1,A,n1);
fact_prem(t2,B,n2);
writeln('PGCD (',A,',',B,') = ',calcul(t1,t2,n1,n2));
End.
Inscription à :
Publier les commentaires (Atom)