Totient function
This is an incredibly inefficient way of finding prime numbers.
use Prime::Factor;
my \π = 0, |(1..*).hyper.map: -> \t { t * [*] t.&prime-factors.squish.map: { 1 - 1/$_ } }
printf "π(%2d) = %3d %s\n", $_, π[$_], $_ - π[$_] - 1Β ?? ''Β !! 'Prime' for 1 .. 25;
(1e2, 1e3, 1e4, 1e5).map: -> $limit {
say "\nCount of primes <= $limit: " ~ +(^$limit).grep: {$_ == π[$_] + 1}
}
Output:
π( 1) = 1
π( 2) = 1 Prime
π( 3) = 2 Prime
π( 4) = 2
π( 5) = 4 Prime
π( 6) = 2
π( 7) = 6 Prime
π( 8) = 4
π( 9) = 6
π(10) = 4
π(11) = 10 Prime
π(12) = 4
π(13) = 12 Prime
π(14) = 6
π(15) = 8
π(16) = 8
π(17) = 16 Prime
π(18) = 6
π(19) = 18 Prime
π(20) = 8
π(21) = 12
π(22) = 10
π(23) = 22 Prime
π(24) = 8
π(25) = 20
Count of primes <= 100: 25
Count of primes <= 1000: 168
Count of primes <= 10000: 1229
Count of primes <= 100000: 9592
Last updated
Was this helpful?