Pergunta

Em ML eu quero começar os divisores primos de um número. Como posso fazer isso, eu sou novato.

Foi útil?

Solução

Usando a divisão de teste simples, Isso começa com p=2 e divide repetidamente n por p, incrementando p como ela vai.

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

Outras dicas

Existem vários algoritmos gerais para encontrar os divisores primos de um inteiro: consulte wikipedia . Teste divisão com um teste de primalidade simples é mais simples de entender.

Localizar ou conceber um algoritmo em pseudo-código; só então se preocupar sobre como colocá-lo em ML.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top