divisores primos de um número no ML
-
22-08-2019 - |
Pergunta
Em ML eu quero começar os divisores primos de um número. Como posso fazer isso, eu sou novato.
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