生成数字的素数因子

时间:2013-10-02 15:00:51

标签: list function haskell factorization

我正在尝试编写一个函数,给定Int大于1的函数给出一个由该数字的素数因子(重复)组成的非递减列表

示例:n = 12,输出应为[2,2,3]

我不知道从哪里开始。

1 个答案:

答案 0 :(得分:2)

当然有很多知道你想要做的算法,所以简单的谷歌搜索才能真正解决这个问题。

但是,我想向您展示一个可能对将来有所帮助的简单思考过程。

由于因子必须按升序显示,您可以:

  1. 从最低素数(2)开始。
  2. 检查号码是否可以除以。如果可以,请执行此操作并返回 1。
  3. 如果没有,请将2替换为下一个素数,然后返回 2。
  4. 现在,显而易见的是,您将要检查的最大素数就是您开始使用的数字。然而,基本的乘法公理表明,如果一个数字可以除以a

    n / a = b
    

    然后它也可以除以b!您可以使用这一事实来进一步缩小检查范围,但我会留给您来计算(或谷歌)上限。

    实际实施当然是你作业的一部分,因此在这里提供代码并不是一个明智的想法。但是,我不认为像next_prime这样的东西对你来说很难。