Jacobi symbol: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: simplified program.) |
SqrtNegInf (talk | contribs) (Added Perl example) |
||
Line 160: | Line 160: | ||
31 1 1 -1 1 1 -1 1 1 1 1 -1 |
31 1 1 -1 1 1 -1 1 1 1 1 -1 |
||
</pre> |
</pre> |
||
=={{header|Perl}}== |
|||
{{trans|Perl 6}} |
|||
<lang perl>use strict; |
|||
use warnings; |
|||
sub J { |
|||
my($k,$n) = @_; |
|||
$k %= $n; |
|||
my $jacobi = 1; |
|||
while ($k) { |
|||
while (0 == $k % 2) { |
|||
$k = int $k / 2; |
|||
$jacobi *= -1 if $n%8 == 3 or $n%8 == 5; |
|||
} |
|||
($k, $n) = ($n, $k); |
|||
$jacobi *= -1 if $n%4 == 3 and $k%4 == 3; |
|||
$k %= $n; |
|||
} |
|||
$n == 1 ? $jacobi : 0 |
|||
} |
|||
my $maxa = 1 + (my $maxn = 29); |
|||
print 'n\k'; |
|||
printf '%4d', $_ for 1..$maxa; |
|||
print "\n"; |
|||
print ' ' . '-' x (4 * $maxa) . "\n"; |
|||
for my $n (1..$maxn) { |
|||
next if 0 == $n % 2; |
|||
printf '%3d', $n; |
|||
printf '%4d', J($_, $n) for 1..$maxa; |
|||
print "\n" |
|||
}</lang> |
|||
{{out}} |
|||
<pre>n\k 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|||
------------------------------------------------------------------------------------------------------------------------ |
|||
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |
|||
3 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 |
|||
5 1 -1 -1 1 0 1 -1 -1 1 0 1 -1 -1 1 0 1 -1 -1 1 0 1 -1 -1 1 0 1 -1 -1 1 0 |
|||
7 1 1 -1 1 -1 -1 0 1 1 -1 1 -1 -1 0 1 1 -1 1 -1 -1 0 1 1 -1 1 -1 -1 0 1 1 |
|||
9 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 |
|||
11 1 -1 1 1 1 -1 -1 -1 1 -1 0 1 -1 1 1 1 -1 -1 -1 1 -1 0 1 -1 1 1 1 -1 -1 -1 |
|||
13 1 -1 1 1 -1 -1 -1 -1 1 1 -1 1 0 1 -1 1 1 -1 -1 -1 -1 1 1 -1 1 0 1 -1 1 1 |
|||
15 1 1 0 1 0 0 -1 1 0 0 -1 0 -1 -1 0 1 1 0 1 0 0 -1 1 0 0 -1 0 -1 -1 0 |
|||
17 1 1 -1 1 -1 -1 -1 1 1 -1 -1 -1 1 -1 1 1 0 1 1 -1 1 -1 -1 -1 1 1 -1 -1 -1 1 |
|||
19 1 -1 -1 1 1 1 1 -1 1 -1 1 -1 -1 -1 -1 1 1 -1 0 1 -1 -1 1 1 1 1 -1 1 -1 1 |
|||
21 1 -1 0 1 1 0 0 -1 0 -1 -1 0 -1 0 0 1 1 0 -1 1 0 1 -1 0 1 1 0 0 -1 0 |
|||
23 1 1 1 1 -1 1 -1 1 1 -1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 -1 0 1 1 1 1 -1 1 -1 |
|||
25 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 |
|||
27 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 1 -1 0 |
|||
29 1 -1 -1 1 1 1 1 -1 1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 1 -1 1 1 1 1 -1 -1 1 0 1</pre> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |