计算给定数字的除数的最佳算法(性能方面)是什么?
如果您可以提供伪代码或某个示例的链接,那就太好了。
编辑:所有的答案都非常有帮助,谢谢。我正在实施阿特金筛,然后我将使用类似于 Jonathan Leffler 指出的东西。Justin Bozonier 发布的链接包含有关我想要的更多信息。
Dmitriy 是对的,您希望阿特金筛子生成主要列表,但我认为这不能解决整个问题。现在您已经有了一个素数列表,您需要查看这些素数中有多少充当除数(以及频率)。
这是算法的一些 python 在 这里查看并搜索“主题:数学 - 需要除数算法”。只需计算列表中的项目数,而不是返回它们。
这是一个数学博士,它解释了你需要在数学上做什么。
基本上它归结为如果您的数字n是:( n = a^x * b^y * c^z 其中 a、b 和 c 是 n 的主要除数,x、y 和 z 是除数重复的次数),那么所有除数的总数是: (x + 1) * (y + 1) * (z + 1).
n
n = a^x * b^y * c^z
(x + 1) * (y + 1) * (z + 1)
编辑:顺便说一句,如果我理解正确的话,要找到 a、b、c 等,你会想做一个贪婪的算法。从你的最大素数除数开始,然后将它自己相乘,直到进一步的乘法超过数字 n。然后移动到下一个最低因子并乘以前一个素数 ^ 乘以当前素数的次数,并继续乘以素数,直到下一个将超过 n… 等等。跟踪您乘以的次数除数在一起并将这些数字应用到上面的公式中。
不是 100% 确定我的算法描述,但如果不是这样,它就是类似的东西。