P-Adic numbers, basic: Difference between revisions

added Raku programming solution
mNo edit summary
(added Raku programming solution)
Line 1,386:
47099/10977 + = 6 6 4 2 1 2 1 6 2 1 3
</pre>
 
=={{header|Raku}}==
<lang perl6># 20210225 Raku programming solution
 
#!/usr/bin/env raku
 
class Padic { has @.v is rw ;
 
method r2pa (Rat \x, \p, \d) { # Reference: math.stackexchange.com/a/1187037
my @k = ^p ;
my \t = $ = x ;
 
while +self.v < d {
my %d = @k Z=> (( t «-« @k ) »/» p)».&{ .Rat.denominator % p };
for %d.keys { self.v.unshift: $_ and last if %d{$_} != 0 }
t = (t - self.v.first) / p ;
}
}
 
method add(Padic \x, \p) {
my $div = 0;
reverse gather for self.v.reverse Z x.v.reverse {
take (.[0] + .[1] + $div ) % p;
$div = ( .[0] + .[1] ) div p
}
}
}
 
my $a = Padic.new ;
$a.r2pa: 5/8, 7, 11;
say $a.v;
 
my $b = Padic.new ;
$b.r2pa: 353/30809, 7, 11;
say $b.v;
 
say $a.add: $b, 7;
 
my $c = Padic.new ;
$c.r2pa: 47099/10977, 7, 11;
say $c.v;</lang>
{{out}}
<pre>[4 2 4 2 4 2 4 2 4 2 5]
[2 3 6 6 3 6 4 3 4 5 5]
(6 6 4 2 1 2 1 6 2 1 3)
[6 6 4 2 1 2 1 6 2 1 3]</pre>
 
=={{header|Wren}}==
351

edits