Modular inverse: Difference between revisions
Content added Content deleted
Basicgames (talk | contribs) |
(add lambdatalk code) |
||
Line 1,505: | Line 1,505: | ||
1969 |
1969 |
||
</pre> |
</pre> |
||
=={{header|Lambdatalk}}== |
|||
{{trans|Phix}} |
|||
<syntaxhighlight lang="scheme"> |
|||
{def mulinv |
|||
{def mulinv.loop |
|||
{lambda {:t :nt :r :nr} |
|||
{if {not {= :nr 0}} |
|||
then {mulinv.loop :nt |
|||
{- :t {* {floor {/ :r :nr}} :nt}} |
|||
:nr |
|||
{- :r {* {floor {/ :r :nr}} :nr}} } |
|||
else {cons :t :r} }}} |
|||
{lambda {:a :n} |
|||
{let { {:a :a} {:n :n} |
|||
{:cons {mulinv.loop 0 |
|||
1 |
|||
{if {< :n 0} then {- :n} else :n} |
|||
{if {< :a 0} then {- :n {% {- :a} :n}} else :a}}} |
|||
} {if {> {cdr :cons} 1} |
|||
then not invertible |
|||
else {if {< {car :cons} 0} |
|||
then {+ {car :cons} :n} |
|||
else {car :cons} }}}}} |
|||
-> mulinv |
|||
{mulinv 42 2017} |
|||
-> 1969 |
|||
{mulinv 40 1} |
|||
-> 0 |
|||
{mulinv 52 -217} |
|||
-> 96 |
|||
{mulinv -486 217} |
|||
-> 121 |
|||
{mulinv 40 218} |
|||
-> not invertible |
|||
</syntaxhighlight> |
|||
=={{header|MAD}}== |
=={{header|MAD}}== |