我必须从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
自然数的因子总数。
答案 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