Вот, попробовал MultiMath.
## Код:
```
PROCEDURE  Fact(n:INTEGER):MM.Integer;
  VAR s :  MM.Integer;
  BEGIN
    s:=MM.One();
    WHILE  n  >  1  DO  MM.ScaleUp(s,n);  DEC (n)  END;
    RETURN s;
  END  Fact;
```

Fact(20000) считало 2с.