质因数分解
作者:TimToady
一个数的质因数分解被定义为一个质数列表,当所有质数相乘时,等于该数。
例如:12 = 2 × 2 × 3,因此它的质因数分解是 {2, 2, 3}
任务
编写一个函数,该函数返回一个数组或集合,其中包含给定数字 n(大于 1)的质因数分解。如果您的语言没有类似 isPrime 的函数,您可以假设您有一个函数可以确定一个数字是否是质数(在代码之前记下它的名称)。
更多
http://rosettacode.org/wiki/Prime_decomposition#Raku
use v6;
my @primes = 2, 3, 5, -> $n is copy {
repeat { $n += 2 } until $n %% none @primes ... { $_ * $_ >= $n }
$n;
} ... *;
sub factors(Int $remainder is copy) {
return 1 if $remainder <= 1;
gather for @primes -> $factor {
if $factor * $factor > $remainder {
take $remainder if $remainder > 1;
last;
}
# How many times can we divide by this prime?
while $remainder %% $factor {
take $factor;
last if ($remainder div= $factor) === 1;
}
}
}
say "{factors 536870911}";
Perl 6 示例