組合數末尾的零(CSU)

2021-08-20 06:24:42 字數 693 閱讀 5792

從m個不同元素中取出n (n ≤ m)個元素的所有組合的個數,叫做從m個不同元素中取出n個元素的組合數。組合數的計算公式如下:

c(m, n) = m!/((m - n)!n!) 

現在請問,如果將組合數c(m, n)寫成二進位制數,請問轉這個二進位制數末尾有多少個零。

第一行是測試樣例的個數t,接下來是t個測試樣例,每個測試樣例佔一行,有兩個數,依次是m和n,其中n ≤ m ≤ 1000。

分別輸出每乙個組合數轉換成二進位制數後末尾零的數量。

24 21000 500

16

思路分析:

因為n ≤ m≤1000,所以m!的結果過大會溢位,所以先得出組合數再化為二進位制的方法是行不通的。因此需要逐個計算。

進行簡單歸類後會發現,當某個數可以有多少個因子是2,它的二進位制末尾就有多少個0;因此在迴圈計算組合時可以逐個求出可以有多少因子是2 。

**:

#includeusing namespace std;

int main()

} for(j = 1; j <= m-n; j++)

} cout<} return 0;

}

CSU 1021 組合數末尾的零

time limit 1 sec memory limit 128 mb從m個不同元素中取出n n m 個元素的所有組合的個數,叫做從m個不同元素中取出n個元素的組合數。組合數的計算公式如下 c m,n m m n n 現在請問,如果將組合數c m,n 寫成二進位制數,請問轉這個二進位制數末尾有多少...

組合數末尾的零

c m,n m m n n 將組合數c m,n 寫成二進位制數,這個二進位制數末尾有多少個零?自然數可以進行質因數分解,質因子2的指數即相應二進位制末尾零的個數 將各個數二進位制末尾0的個數累加,得到階乘數末尾0的個數。優化 include int f int main printf d n ans...

組合數末尾的零

time limit 1000 ms memory limit 65536 k total submit 70 43 users total accepted 50 40 users rating special judge no description 從m個不同元素中取出n n m 個元素的所有...