我正在尝试提出一种有效的方法来列出一个大因子的所有除数。让我们说1000!蛮力是不可能的。有效的方法吗? 我需要处理它们,即找到它们用于编程挑战的总和。
答案 0 :(得分:2)
{2: 3, 3: 1}
,因为24是2**3 * 3**1
。1000!
的素数因子分解。这是数字< = 1000的字典的组合,通过对每个键(素数)的所有值求和来组合。答案 1 :(得分:0)
以下是有效解决方案的步骤:
n!可以表示为:-n! =(a1 ^ p1)(a2 ^ p2)x ...(ak ^ pk)。
其中ak是小于n的素数除数,而pk是最大幂 可以除以n!。
通过筛子找到质数和最大功率 容易找到:
countofpower = [n/a] + [n/a^2] + [n/a^3] +...... or ` while (n)
{
n/ = a;
ans += n
}
因子计数= (ans1 +1)*(ans2 +1)*....(ansk +1)
在计算出最后一步后,得出的总和是:
SUM = product of all (pow(ak,pk+1)-1)/(ak-1);
ex = 4!
4! = 2^3 * 3^1;
count of factors = (3+1)*(1+1) = 8 (1,2,3,4,6,8,12,24)
sum = ( 1 + 2 + 4 + 8)*(1 + 3) = 60.