對於組合數中要求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 }