求一个大因子数的除数之和?

时间:2012-08-01 10:37:48

标签: math factorial

我正在尝试提出一种有效的方法来列出一个大因子的所有除数。让我们说1000!蛮力是不可能的。有效的方法吗? 我需要处理它们,即找到它们用于编程挑战的总和。

2 个答案:

答案 0 :(得分:2)

  1. 找到每个数字的素数因子化< = 1000.我会将其存储为素数字典 - >功率。例如。对于单个数字,例如24 {2: 3, 3: 1},因为24是2**3 * 3**1
  2. 找出1000!的素数因子分解。这是数字< = 1000的字典的组合,通过对每个键(素数)的所有值求和来组合。
  3. 然后您可以使用equation 14 on this page作为@AakashM已经说过。

答案 1 :(得分:0)

以下是有效解决方案的步骤:

  1. n!可以表示为:-n! =(a1 ^ p1)(a2 ^ p2)x ...(ak ^ pk)。

    其中ak是小于n的素数除数,而pk是最大幂 可以除以n!。

  2. 通过筛子找到质数和最大功率 容易找到:

    countofpower =  [n/a] + [n/a^2] + [n/a^3] +...... or   `  while (n)
    {
      n/ = a;
      ans += n
    }
    
  3. 因子计数= (ans1 +1)*(ans2 +1)*....(ansk +1)

  4. 在计算出最后一步后,得出的总和是:

    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.