Modular arithmetic: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (syntax highlighting fixup automation) |
(→{{header|Raku}}: update code to recent module version) |
||
Line 1,433: | Line 1,433: | ||
(formerly Perl 6) |
(formerly Perl 6) |
||
We'll use the [https://raku.land/github:grondilu/finite-fields-raku FiniteFields] repo. |
|||
⚫ | |||
has ($.residue, $.modulus); |
|||
multi method new($n, :$modulus) { self.new: :residue($n % $modulus), :$modulus } |
|||
method Bridge { $.residue } |
|||
multi method gist { "$.residue 「mod $.modulus」" } |
|||
} |
|||
⚫ | |||
sub infix:<Mod>(Int $n, Int $modulus where * > 1) returns Modulo { |
|||
$*modulus = 13; |
|||
Modulo.new: $n, :$modulus |
|||
} |
|||
⚫ | |||
multi infix:<+>(Modulo $a, Int $b) { $a + ($b Mod $a.modulus) } |
|||
multi infix:<+>(Int $a, Modulo $b) { ($a Mod $b.modulus) + $b } |
|||
⚫ | |||
multi infix:<+>(Modulo $a, Modulo $b where $a.modulus ~~ $b.modulus) returns Modulo { |
|||
Modulo.new: $a.Bridge + $b.Bridge, :modulus($b.modulus) |
|||
} |
|||
multi infix:<**>(Modulo $a, Int $e) returns Modulo { |
|||
Modulo.new: $a.Bridge.expmod($e, $a.modulus), :modulus($a.modulus) |
|||
} |
|||
⚫ | |||
my $m-new = f( 10 Mod 13 ); |
|||
⚫ | |||
{{out}} |
{{out}} |
||
<pre>1 |
<pre>1</pre> |
||
=={{header|Red}}== |
=={{header|Red}}== |