2013-10-02 5 views
-2

Я пытаюсь написать функцию, которая дана Int больше единицы дает нон убывающую список, составленный из главных факторов (с повторением) этого числаСформировать простые множители числа

Пример: n = 12, тем выход должен быть [2,2,3]

Я не знаю с чего начать.

+1

Поймите это: http://www.haskell.org/haskellwiki/99_questions/Solutions/35 – Sibi

+2

Немного веб-поиска найдет ссылку, которую вы предоставили сиби. Если у вас все еще есть проблемы с реализацией этого или понимание решения, тогда покажите нам, что вы пробовали, и мы сможем лучше помочь. – mhwombat

+1

Для вопросов о программировании с простыми числами я скромно рекомендую [это эссе] (http://programmingpraxis.com/essays) в своем блоге, который включает в себя код Haskell для факторинговых целых чисел. – user448810

ответ

2

Есть, конечно, хорошо известные алгоритмы для того, что вы хотите сделать, поэтому простой поиск в Google действительно решит это.

Однако я хотел бы показать вам простой процесс мышления, который может быть полезен в будущем.

Поскольку факторы должны появляться в порядке возрастания, вы могли бы:

  1. Начинайте с самой низкой штрихом (2).
  2. Проверьте, может ли этот номер быть разделен на него. Если он может, сделать это и вернуться к 1.
  3. Если нет, то замените 2 следующего премьер и вернуться к 2.

Теперь, очевидно, что самое большое простое число вы будете когда-либо проверка - это номер, с которого вы начали. Однако основное умножение аксиома гласит, что если число можно разделить на a:

n/a = b 

Тогда можно разделить на b! Вы можете использовать этот факт для дальнейшего сужения диапазона проверки, но я оставлю его вам, чтобы определить (или google) верхнюю границу.

Фактическая реализация, конечно же, является частью вашей домашней работы, и поэтому предоставление кода здесь не будет разумной идеей. Тем не менее, я не думаю, что для вас будет сложно использовать такие вещи, как next_prime.

Смежные вопросы