P-Adic numbers, basic: Difference between revisions
Content added Content deleted
m (→{{header|Raku}}: insignificant changes) |
|||
Line 1,602: | Line 1,602: | ||
<lang perl6># 20210225 Raku programming solution |
<lang perl6># 20210225 Raku programming solution |
||
⚫ | |||
#!/usr/bin/env raku |
|||
⚫ | |||
⚫ | |||
my @k = ^p ; |
|||
my \t = $ = x ; |
|||
⚫ | |||
while +self.v < d { |
while +self.v < d { |
||
my %d = |
my %d = ^p Z=> (( $x «-« ^p ) »/» p )».&{ .denominator % p }; |
||
for %d.keys { self.v.unshift: $_ and last if %d{$_} != 0 } |
for %d.keys { self.v.unshift: $_ and last if %d{$_} != 0 } |
||
$x = ($x - self.v.first) / p |
|||
} |
} |
||
self.v |
|||
} |
} |
||
method add(Padic \x, \p) { |
method add (Padic \x, \p) { |
||
my $div = 0; |
my $div = 0; |
||
reverse gather for self.v.reverse Z x.v.reverse { |
reverse gather for ( self.v.reverse Z x.v.reverse )».sum { |
||
take ( |
take ( $_ + $div ) % p and $div = $_ div p |
||
$div = ( .[0] + .[1] ) div p |
|||
} |
} |
||
} |
} |
||
} |
} |
||
my $a = Padic.new |
given my $a = Padic.new { say .r2pa: 5/8, 7, 11 } |
||
$a.r2pa: 5/8, 7, 11; |
|||
say $a.v; |
|||
my $b = Padic.new |
given my $b = Padic.new { say .r2pa: 353/30809, 7, 11 } |
||
$b.r2pa: 353/30809, 7, 11; |
|||
say $b.v; |
|||
say $a.add: $b, 7; |
say $a.add: $b, 7; |
||
my $c = Padic.new |
given my $c = Padic.new { say .r2pa: 47099/10977, 7, 11 } |
||
⚫ | |||
$c.r2pa: 47099/10977, 7, 11; |
|||
⚫ | |||
{{out}} |
{{out}} |
||
<pre>[4 2 4 2 4 2 4 2 4 2 5] |
<pre>[4 2 4 2 4 2 4 2 4 2 5] |