【題目描述】
求出 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位,所以每次乘法操作時只需要進行十次,之後的就不需要計算了。