計算組合數C n,m (SDUT 2241

2021-08-10 07:07:09 字數 863 閱讀 8536

time limit: 1000ms memory limit: 65536kb

problem description

c(n,m)=n!/(m! * (n-m)!).(0<=n,m<=10^8且m<=n,該題結果保證在int範圍之內)。

input

第一行是乙個正整數t,下面t行每行有兩個整數n和m。

output

對於每一行輸入,分別對應輸出組合數c(n,m)的值

example input

3 1 1

2 1

3 2

example output

1 2

3 hint

這道題很水,但是因為好長時間沒有做題了,覺得有個思想還不錯。

如果做這道題是硬計算階乘,那麼即使用long long也存不下,這時就可以將數學公式簡化。比如:要計算n!/m!,其實就相當於計算n*(n-1)(n-2)(n-3)……*(m+1),因此就簡化了計算。

ac的**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define n 100010

int main(void)

return

0;}

計算組合數

1.防溢位 如果直接用c n,m n!n m m 來程式設計很可能會在算n!時就爆了long long,所以每一步最好把除分母也算上。所以對於c n,m 來說取m min m,n m 來算c n,m n n 1 n 2 n m 1 m m 1 m 2 1 顯然分子分母都是m項相乘,從後往前去算 先算...

計算組合數

計算組合數 time limit 1000ms memory limit 32768kb submit statistic problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則...

計算組合數

time limit 1000 ms memory limit 32768 kib problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則,若m n,c n,m 1 否則 c n...