<算法>除数问题</算法>

时间:2011-05-17 14:07:01

标签: algorithm number-theory

考虑到除数的数量,我们必须找到第一个三角形数。

  

三角形数与自然数之和相同。

我采用了从2开始取素数的方法并置换它们,以便生成的数字与三角形数相匹配。

例如,假设我们有5个除数。我从{2}开始(2,3,5)作为N=p1^a1*p2*a2*p3^a3。这里的(a1+1)(a2+1).... 2,3,5除数的数量可以取幂和置换。然后n^2+n=2k(k是从排列中获得的值)。我检查n值为Integer。

除此之外,我还没有找到任何有效的算法,是否有任何人有更优的算法?

1 个答案:

答案 0 :(得分:1)

您可以使用反向方法。因为第n个三角形数可以被找到(n ^ 2 + n)/ 2,所以你可以迭代n并且对于每个数字计数它的除数。一些优化:

  • (n ^ 2 + n)/ 2 = n(n + 1)/ 2。 n和n + 1没有任何公约数(1除外),只有其中一个是偶数。因此,除数的数量是n / 2和n + 1的除数的倍数,或n和(n + 1)/ 2的除数的乘积。
  • 除数的数量可以通过您提到的公式找到,因此您只需要一个素数列表(例如,获取here

这种方法似乎更简单,更优化。此外,它保证您将找到第一个三角形数字。