一尘不染

计算给定数除数的算法

algorithm

计算给定数除数的最佳算法(性能方面)是什么?

如果您可以提供伪代码或一些示例的链接,那就太好了。

编辑:所有的答案都非常有帮助,谢谢。我正在实现Atkin筛分法,然后将使用类似于Jonathan Leffler所指出的方法。贾斯汀·博佐尼尔(Justin
Bozonier)发布的链接提供了有关我想要的更多信息。


阅读 225

收藏
2020-07-28

共1个答案

一尘不染

德米特里(Dmitriy)是对的,您希望让阿特金筛子(Sieve of
Atkin)生成主要清单,但我不认为这可以解决整个问题。现在,您已经有了素数的列表,您将需要查看其中有多少个素数用作除数(以及除数)。

这是用于算法的一些python。在 这里搜索“主题:数学-需要除数算法”。只是计算列表中的项目数,而不是返回它们。

这是一位数学博士,解释了您需要做的确切的数学运算

从本质上讲,它可以归结为您的数字n是否为:(
n = a^x * b^y * c^z
其中a,b和c是n的素数除数,而x,y和z是重复除数的次数),则所有除数的总数为:
(x + 1) * (y + 1) * (z + 1)

编辑:顺便说一句,要找到a,b,c等,如果我正确理解这一点,您将想做一个相当于贪婪算法的事情。从最大的素数除数开始,并将其自身相乘,直到进一步的乘积超过数字n。然后移至下一个最低因子,并乘以上一个质数^乘以当前质数的次数,并继续乘以质数,直到下一个质数超过n…。等等。请跟踪您乘以除数并将这些数字应用到上面的公式中。

并非100%知道我的算法描述,但如果不是,那是类似的事情。

2020-07-28