P34 - Calculate Euler's totient function phi(m).
Author: Philip Potter
Find out what the value of phi(m) is if m is a prime number. Euler's totient function plays an important role in one of the most widely used public key cryptography methods (RSA). In this exercise you should use the most primitive method to calculate this function (there are smarter ways that we shall discuss later).
Specification
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.
Example
# m = 10: r = 1,3,7,9; thus phi(m) = 4. Note the special case: phi(1) = 1. > say totient_phi 10 4
Source code: 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);