Domanda

In ML voglio ottenere i divisori primi di un numero. Come posso fare questo, io sono principiante.

È stato utile?

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
scroll top