組合數快速求解

 對於組合數中要求C(N,M)的話,一般常用的方法就是對除號的上下分別進行質因子分解,但同樣是質因子分解也可以有不同的解法.

  下面給出一種較快的方法:

  將(n!)質因數分解的算法

  (注意是直接分解(n!),而不是將(1,2,3...n)一項一項分解)

  如果k是一個質數,f(k)表示裏質因數K的個數

  f(k)=n/k+n/(k*k)+n/(k+k+k)+...n/(k^m);

  其中m是使n/(k^m)是正數的最大的整數;

  下面給出核心部分的代碼:

  01 while (biao[j]<=n)//N爲要分解的階乘

  02     {

  03           int q=biao[j];//biao數組中記錄的是質數表.

  04           while (q<=n)

  05           {

  06                 timee[j]+=(n/q);//將質因子的次數存入TIMEE中。

  07                 q=q*biao[j];

  08           }

  09           j++;

  10     }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章