code 41256;
real procedure MULHYPERGPROB(X,N,K,R);
value N,K; real N,K; array X,R;
begin integer I,J,L,SR,SX; real MHP,XJ,RJ;
    if N < 1 ∨ N > ENTIER(N) then
        STATAL3 ERROR(“MULHYPERGPROB”,2,N);
    if K < 1 ∨ K > ENTIER(K) then
        STATAL3 ERROR(“MULHYPERGPROB”,3,K);
    SX := SR := 0;
    MHP := 0;
    for J := 1 step 1 until K do
    begin RJ := R[J]; XJ := X[J];
            if RJ < 0 ∨ RJ > ENTIER(RJ) then
                STATAL3 ERROR(“MULHYPERGPROB”,4,RJ);
            SR := SR + RJ; SX := SX + XJ;
            if XJ > RJ ∨ XJ < 0 ∨ XJ > ENTIER(XJ) then
            begin MULHYPERGPROB := 0; goto OUT end;
            MHP := MHP + LOGGAMMA(RJ+1) - LOGGAMMA(XJ+1)
            - LOGGAMMA(RJ-XJ+1);
     end J ;
     if SX ≠ N then
     begin MULHYPERGPROB := 0; goto OUT end;
     MHP := MHP + LOGGAMMA(N+1) + LOGGAMMA(SR-N+1)
            - LOGGAMMA(SR+1);
     MULHYPERGPROB := EXP(MHP);
   OUT:
end MULHYPERGPROB;
eop