Algorithm 找到前N个自然数的因子数的最佳算法是什么?

Algorithm 找到前N个自然数的因子数的最佳算法是什么?,algorithm,math,dynamic-programming,mathematical-optimization,sieve-of-eratosthenes,Algorithm,Math,Dynamic Programming,Mathematical Optimization,Sieve Of Eratosthenes,我必须找到从2到N的所有数字的因子总数 这是我的方法 运行Eratosthenes的筛并获得2到N的所有素数 对于从2到N的每个数字,进行素因子分解,并获得所有素因子的指数。将1添加到每个素因子指数,并将所有指数相乘,即 N = 2^x1 * 3^x2 * 5*x^3 ... 那么 是否有任何替代/有效的方法可以有效地计算第一个N自然数的因子总数。2到N之间的所有整数的因子数可以通过以下公式以O(N)为单位计算: total = N/1 + N/2 + ... + N/N - 1. (inte

我必须找到从
2到N的所有数字的因子总数

这是我的方法

运行Eratosthenes的
并获得
2到N的所有素数

对于从
2到N
的每个数字,进行素因子分解,并获得所有素因子的指数。将
1
添加到每个素因子指数,并将所有指数相乘,即

N = 2^x1 * 3^x2 * 5*x^3 ...
那么


是否有任何替代/有效的方法可以有效地计算第一个
N
自然数的因子总数。

2到N之间的所有整数的因子数可以通过以下公式以O(N)为单位计算:

total = N/1 + N/2 + ... + N/N - 1. (integer division)
2和N之间的任何特定整数x是2和N之间的以下整数的因子:x,2x,3x,4x,…(N/x)x

例1,从2到6的数字的因子总数为13:6/1+6/2+6/3+6/4+6/5+6/6-1=6+3+2+1+1-1=13

These are the factors:
2: 1, 2
3: 1, 3
4: 1, 2, 4
5: 1, 5
6: 1, 2, 3, 6

2, 3, and 5 all have 2 factors, 4 has 3, and 6 has 4, for a total of 13.
如果您只想了解主要因素:

total = N/p1 + N/p2 + ... + N/pk where pk is the largest prime <= N.

无法接受非公共链接。已删除该链接。谢谢OP想要所有的因子,正如问题中因子数的公式所示。你的算法很出色,+1。但你在最后一段的解释可能会更好。你可以通过
1
来避免最后的减法,方法是只求
N/(N-1)
N/N
-1
。这个问题要求因子的数量,OP的公式清楚地表明他想要找到因子的数量。如果你想找到所有的因子,如果你遍历从1到N的所有数字,时间复杂度将比OP的当前情况更差,即O(N^2)。这是O(N^2)。对于大的“N”不适合进行缩放。有什么方法可以优化这个吗?@Phamtrong:这个算法不是O(N^2),而是O(N)。有N个整数除法、N-1个加法和1个减法(以Dave的原始形式)。Dave算法的要点是,它不会找到任何数字的因子——它们最终会以一种不同的、更短的方式被计算出来。Dave的算法确实工作正常——我测试了
N
到10000的所有值,将他的结果与更简单、更慢的方法进行比较。我删除了自己的答案,因为他的答案好多了。
total = N/p1 + N/p2 + ... + N/pk where pk is the largest prime <= N.
2: 2
3: 3
4: 2
5: 5
6: 2, 3