Plain text C C# C++ Go Haskell HTML Java JavaScript Jinja2 JSX Markdown Perl PHP PostgreSQL Python 3 Raku Rust Sh SQL SQLite TypeScript TypeScript-JSX Share (delete after 24 hours) Share procedure euclid_gcd (integer val a, integer val n, integer gcd, integer inverse) { call euclid_rec(a, n, 1, 0, 0, 1, gcd, inverse); inverse <- mod(inverse, n); } procedure euclid_rec (integer val r', integer val r, integer val s', integer val s, integer val t', integer val t, integer gcd, integer inverse) integer temp; integer quotient; procedure (integer val q, integer prev, integer curr) -> void euclid_step; { if r = 0 then gcd <- r; inverse <- s'; else euclid_step <- lambda (integer val quotient, integer prev, integer curr) integer temp; { temp <- prev; prev <- curr; curr <- temp - quotient * curr; }; quotient <- r' / r; call euclid_step(quotient, r', r); call euclid_step(quotient, s', s); call euclid_step(quotient, t', t); call euclid_rec(r', r, s', s, t', t, gcd, inverse); fi } procedure main () integer gcd; integer inverse; { call euclid_gcd(37551, 17, gcd, inverse); writeln inverse; }