divisori primi di un numero in ML
-
22-08-2019 - |
Domanda
In ML voglio ottenere i divisori primi di un numero. Come posso fare questo, io sono principiante.
Soluzione
Utilizzando la semplice divisione di prova, questo inizia con p=2
e divide più volte n
da p
, incrementando p
come va.
open LargeInt (* if you want to work with huge numbers like 5000000000 *)
infix 7 quot rem
val prime_factors =
let fun trial_division p n =
if p > n then nil else
if n rem p = 0
then p :: trial_division p (n quot p)
else trial_division (p + 1) n
in trial_division 2 end
Altri suggerimenti
Ci sono diversi algoritmi generali per trovare i divisori primi di un numero intero: vedi wikipedia . divisione di prova con un semplice test di primalità è più semplice da capire.
Trova o ideare un algoritmo in pseudocodice; solo allora preoccuparsi di come metterla in ML.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow