Find first and last set bit of a long integer
Raku integers are arbitrary sized, and the lsb and msb methods are built-in.
sub table ($base,$power) {
my $digits = ($base ** $power).chars;
printf "%{$digits}s lsb msb\n", 'number';
for 0..$power {
my $x = $base ** $_;
printf "%{$digits}d %2d %2d\n", $x, $x.lsb, $x.msb;
}
}
table 42, 20;
table 1302, 20;
Output:
number lsb msb
1 0 0
42 1 5
1764 2 10
74088 3 16
3111696 4 21
130691232 5 26
5489031744 6 32
230539333248 7 37
9682651996416 8 43
406671383849472 9 48
17080198121677824 10 53
717368321110468608 11 59
30129469486639681536 12 64
1265437718438866624512 13 70
53148384174432398229504 14 75
2232232135326160725639168 15 80
93753749683698750476845056 16 86
3937657486715347520027492352 17 91
165381614442044595841154678784 18 97
6946027806565873025328496508928 19 102
291733167875766667063796853374976 20 107
number lsb msb
1 0 0
1302 1 10
1695204 2 20
2207155608 3 31
2873716601616 4 41
3741579015304032 5 51
4871535877925849664 6 62
6342739713059456262528 7 72
8258247106403412053811456 8 82
10752237732537242494062515712 9 93
13999413527763489727269395457024 10 103
18227236413148063624904752885045248 11 113
23731861809918778839625988256328912896 12 124
30898884076514250049193036709740244590592 13 134
40230347067621553564049333796081798456950784 14 144
52379911882043262740392232602498501590949920768 15 155
68198645270420328087990686848453049071416796839936 16 165
88794636142087267170563874276685869890984669485596672 17 175
115610616256997621856074164308245002598062039670246866944 18 186
150525022366610903656608561929334993382676775650661420761088 19 196
195983579121327396560904347631994161384245161897161169830936576 20 206
Last updated