【问题标题】:Prime factorization algorithm: How to make it faster?素数分解算法:如何使其更快?
【发布时间】:2014-01-24 00:16:40
【问题描述】:

我有一个程序可以找到给定数字的质因数。该算法的工作方式如下所述。

1) 当 n 可以被 2 整除时,打印 2 并将 n 除以 2。

2) 在第 1 步之后,n 必须是奇数。现在开始一个循环,从 i = 3 到 n 的平方根。当 i 除 n 时,打印 i 并将 n 除以 i,将 i 增加 2 并继续。

3) 如果n是质数并且大于2,那么经过以上两步,n不会变成1。如果 n 大于 2,则打印 n。

有没有办法让它更快?

【问题讨论】:

  • 能否详细说明?

标签: prime-factoring


【解决方案1】:

您可以通过仅除以素数而不是复合数来使其更快。如果它可以被合数整除,那么当除以该合数的主要因素时,您已经发现了这一点。例如,如果您已经确定一个数字可以被 3 整除(并且正确地减少了它),那么测试一个数字是否可以被 9 整除是没有意义的。

此外,在您确定您正在测试的值不能被它整除之前,我不会将测试值提前(在您的情况下是 2,到我的下一个素数)。

例如:27。当您的测试值为 3 时,您的算法将 27 除以 3 得到 9,然后立即将测试值增加到 5。它应该 left 在 3 直到你除以它的数字不再是一个因素。

【讨论】:

  • 你的第二点是对的。就你的第一点而言,我宁愿不使用数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多