May
19
F#で素因数分解する
前の無限素数シーケンスprimeを用いて
let rec factorize1 l n =
let p=Seq.head l
if p*p>n then [n]
elif n%p=0 then p::(factorize1 l (n/p))
else factorize1 (Seq.skip 1 l) n;;
let factorize = factorize1 prime;;
ただし、これではnが大きいとき求められないので、その場合はint64を用い
let rec factorize1 l n =
let p=int64(Seq.head l)
if p*p>n then [n]
elif n%p=0L then p::(factorize1 l (n/p))
else factorize1 (Seq.skip 1 l) n;;
let factorize = factorize1 prime;;
factorize 600851475143L;;
などする。