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

时间:2019-01-27 20:04:07

标签: algorithm math dynamic-programming mathematical-optimization sieve-of-eratosthenes

我必须从2 to N中查找所有数字的因子总数。

这是我的方法。

运行Sieve of Eratosthenes,并从2 to N获取所有素数。

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

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

然后

Number of factors = (x1 + 1) * (x2 + 1) * (x3 + 1) ...

有没有其他有效的方法可以有效地计算第一个N自然数的因子总数。

1 个答案:

答案 0 :(得分:6)

可以通过以下公式在O(N)中计算2到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-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.

例如,N = 6:6/2 + 6/3 + 6/5 = 6

2: 2
3: 3
4: 2
5: 5
6: 2, 3