首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言計算大數組合數超時優化:數學公式替代遞歸

     編輯:程式設計綜合問答

問題現象

遞歸實現組合數 C(n, k),小數據正常,C(1024, 512) 直接超時,即使取模也無效。

優化方向

組合數屬純數學計算,無需遞歸枚舉。採用乘法公式:

C(n, k) = n*(n-1)*...*(n-k+1) / k!
      = ∏_{i=1}^{k} (n - k + i) / i

結合模逆元(費馬小定理,模為質數 1e9+7)逐項計算,時間複雜度 O(k),瞬間出結果。

關鍵點

  • 預先計算階乘與逆元階乘陣列(若多次查詢)。
  • 單次查詢可迭代乘除,每步取模。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved