組合數後十位

【題目描述】

求出 C(n,r)的最後十位,其中 0<r≤n≤30000,輸出時不足十位數也按十位輸出,此
時高位用 0 表示。C(n,r)=n×(n-1)×……×(n-r+1)/(1×2×3×……×r)。

輸入數據爲兩個以空格隔開的自然數 n,r。 

【輸入】

一行兩個整數

【輸出】

一行,10 位數字

【樣例輸入】

 5 2

【樣例輸出】

 0000000010

===========================題解=======================

求組合數的末十位。

組合數:C(n,r)=n×(n-1)×……×(n-r+1)/(1×2×3×……×r)

因爲其中0<r<=n<=30000,所以要用高精度,但是求組合數的式子中要用到除法,而除數與被除數都是高精度數,高精除高精過於複雜。

由於是組合數,分子除以分母一定可以整除,所以可以先求出分子的所有質因數,再和分母不斷約分,之後前面存儲分子質因數的數組中就是答案的全部質因數,再將它們用高精度乘法乘起來,注意這裏只需要求後10位,所以每次乘法操作時只需要進行十次,之後的就不需要計算了。


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