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)