組合數末尾的零

2021-07-02 17:33:33 字數 670 閱讀 7968



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

將組合數c(m, n)寫成二進位制數,這個二進位制數末尾有多少個零?

*  自然數可以進行質因數分解,質因子2的指數即相應二進位制末尾零的個數;

將各個數二進位制末尾0的個數累加,得到階乘數末尾0的個數。

優化:

# include 

int f = ;

int main()

printf("

%d\n

", ans);

}return

0;}

更新:2012/3/12

又翻了翻程式設計之美,看到乙個求 n 的階乘末尾 0 的個數是轉化成:n - n 的二進位制表示中 1 的個數;

組合數可以化為階乘相除的形式;

而正整數 n 的二進位制表示中 1 的個數可以用 log2(n) 的方法得到,於是有了下面的:

1

/*csu 1021

*/2 # include 3

4int cnt(int n);56

int main()

7 16

17int cnt(int n)

18 25

return c;

26 }

相比之前加表的方法各有千秋。。oj顯示的耗時都是16ms。

組合數末尾的零

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 個元素的所有...

I 組合數末尾的零

i 組合數末尾的零 submit page time limit 1 sec memory limit 128 mb submitted 53 solved 45 description 從m個不同元素中取出n n m 個元素的所有組合的個數,叫做從m個不同元素中取出n個元素的組合數。組合數的計算公...

組合數末尾的零(CSU)

從m個不同元素中取出n n m 個元素的所有組合的個數,叫做從m個不同元素中取出n個元素的組合數。組合數的計算公式如下 c m,n m m n n 現在請問,如果將組合數c m,n 寫成二進位制數,請問轉這個二進位制數末尾有多少個零。第一行是測試樣例的個數t,接下來是t個測試樣例,每個測試樣例佔一行...