P34 - 计算欧拉函数 phi(m)。
作者:Philip Potter
如果 m 是素数,求 phi(m) 的值。欧拉函数在最广泛使用的公钥加密方法之一 (RSA) 中起着重要作用。在本练习中,您应该使用最原始的方法来计算此函数(我们稍后将讨论更智能的方法)。
规范
P34 (**) Calculate Euler's totient function phi(m).
Euler's so-called totient function phi(m) is defined as the number of
positive integers r (1 <= r < m) that are coprime to m.示例
# m = 10: r = 1,3,7,9; thus phi(m) = 4. Note the special case: phi(1) = 1. > say totient_phi 10 4
源代码: P34-rhebus.pl
use v6;
# from P32-rhebus.pl
sub gcds (Int $a, Int $b) {
return ($a, $b, *%* ... 0)[*-2];
}
# from P33-rhebus.pl
our sub infix:<coprime> (Int $a, Int $b) { (gcds($a,$b) == 1).Numeric }
# Example 1: iteration
multi totient_phi_i (1 --> Int) { 1 }
multi totient_phi_i (Int $n --> Int) {
my $total = 0;
for 1..^$n -> $k { $total++ if $n coprime $k }
return $total;
}
say "phi($_): ", totient_phi_i $_ for (1..20);
# Example 2: «coprime« hyper operator
multi totient_phi (1 --> Int) { 1 }
multi totient_phi (Int $n --> Int) {
return 1 if $n ~~ 1;
return [+] ($n «coprime« list(1..^$n));
}
say "phi($_): ",totient_phi $_ for (1..20);
Perl 6 示例