求組合數(遞推法、乘法逆元、盧卡斯定理、分解質因數)

文章目錄


常規的解法就不多加贅述了,如(分子/分母,邊乘邊除),本文講述以下方法:
遞推法
了解楊輝三角、二項式、組合數之間的聯系
時間復雜度 O ( n 2 ) O(n^2) O(n2)
數據范圍10^4
乘法逆元
C n m = n ! m ! ( n ? m ) ! C_{n}^{m}=\frac{n!}{m!(n-m)!} Cnm?=m!(n?m)!n!?
數據較大,運用乘法逆元+快速冪
階乘 O ( n ) , 快速冪 O ( l o g ( n ) ),總 O ( l o g ( n ) ) 階乘O(n),快速冪O(log (n)),總O(log (n)) 階乘On,快速冪Olog(n)),總Olog(n)
數據范圍10^6
盧卡斯定理
C n m = C n p m p ? C n % p m % p % p C_{n}^{m}=C_\frac{n}{p}^\frac{m}{p}\cdot C_{{n\%p}}^{m\%p} \%p Cnm?=Cpn?pm???Cn%pm%p?%p
用于n,m比較大,p比較小,分解+乘法逆元求組合數法。
時間復雜度: O ( n ? l o g 2 n ) O(n\cdot log_2n) O(n?log2?n)
使用范圍(大概): n , m < = 10^18, p < = 10^6,

遞推法 10^4

C n m = C n ? 1 m + C n ? 1 m ? 1 C_{n}^{m} =C_{n-1}^{m} +C_{n-1}^{m-1} Cnm?=Cn?1m?+Cn?1m?1?

(從n個里面選m個等同于,選最后一個+不選最后一個)

楊輝三角

  • 楊輝三角第n行是 ( a + b ) n (a+b)^n (a+b)n展開的系數

  • 楊輝三角的遞推和組合數相同(左上+上)

  • 高中數學二項式的展開 ( a + b ) n = ∑ i = 0 n C n i a i b n ? i (a+b)^n=\sum_{i=0}^{n}{C_{n}^{i}a^ib^{n-i}} (a+b)n=i=0n?Cni?aibn?i


綜上,更能體會組合數和楊輝三角直接的千絲萬縷

代碼

時間復雜度( n 2 n^2 n2),n,m<=10^4

#include<bits/stdc++.h>
using namespace std;
int main()
{int a[100][100],n=100;a[0][0]=1;for(int i=1;i<=n;i++)for(int j=0;j<=i;j++){a[i][j]=a[i-1][j]+a[i-1][j-1];}cout<<a[5][2]<<'\n';
}

乘法逆元 10^6

關于乘法逆元可以看 2024ccpc全國邀請賽(鄭州) 補題(乘法逆元)

  • 不要想著邊乘邊除就不需要乘法逆元了。這樣看似能夠整除,但在運算過程中遇到取模,此后就不能保證精確

a mod b (b為質數),由費馬小定理得,a 的逆元是 a b ? 2 a^{b-2} ab?2

  • 為方便計算用公式

C n m = n ! m ! ( n ? m ) ! C_{n}^{m}=\frac{n!}{m!(n-m)!} Cnm?=m!(n?m)!n!?

代碼

階乘 O ( n ) , 快速冪 O ( l o g ( n ) ),總 O ( l o g ( n ) ) 階乘O(n),快速冪O(log (n)),總O(log (n)) 階乘On,快速冪Olog(n)),總Olog(n) n,m<=10^6

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e8,mod=1e9+7;
int a[N];// 階乘%mod,注意N,根據題目修改,不然可能時間超限
int qpow(int a,int b,int c)//快速冪
{int ans=1;while(b){if(b&1) ans= ans*a%c;a=a*a%c,b/=2;}return ans;
}
int C(int n,int m)//排列  從n個里面選m個
{if(m>n) return 0;return a[n]*qpow(a[n-m]*a[m]%mod,mod-2,mod)%mod;//!!!!//pow(a,b,c)  a^b過程中%c
}
signed main()
{a[0]=1;for(int i=1;i<=N;i++)a[i]=i*a[i-1]%mod;cout<<C(10,3);
}

盧卡斯定理 1 0 18 m o d 1 0 6 10^{18}mod 10^6 1018mod106

用于n,m比較大,p比較小

C n m = C n p m p ? C n % p m % p % p C_{n}^{m}=C_\frac{n}{p}^\frac{m}{p}\cdot C_{{n\%p}}^{m\%p} \%p Cnm?=Cpn?pm???Cn%pm%p?%p
可以逐層分解

代碼

使用范圍(大概): n , m < = 10^18, p < = 10^6,

時間復雜度: O ( n ? l o g 2 n ) O(n\cdot log_2n) O(n?log2?n)

//qpow 快速冪        return ans;
//C    組合數(逆元) return a[n]*qpow(a[n-m]*a[m]%mod,mod-2,mod)%mod;
//a[N] 階乘
int lucas(int n,int m)//在原來基礎上加上lucas函數,遞歸求解
{if(m==0)return 1;return lucas(n/mod,m/mod)*C(n%mod,m%mod)%mod;
}
signed main()
{a[0]=1;for(int i=1;i<=N;i++)a[i]=i*a[i-1]%mod;cout<<lucas(10,3);//直接調用lucas
}

分解質因數

待補……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67922.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF進階 | WPF 動畫特效揭秘:實現炫酷的界面交互效果

WPF進階 | WPF 動畫特效揭秘&#xff1a;實現炫酷的界面交互效果 前言一、WPF 動畫基礎概念1.1 什么是 WPF 動畫1.2 動畫的基本類型1.3 動畫的核心元素 二、線性動畫詳解2.1 DoubleAnimation 的使用2.2 ColorAnimation 實現顏色漸變 三、關鍵幀動畫深入3.1 DoubleAnimationUsin…

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.27 NumPy+Pandas:高性能數據處理的黃金組合

2.27 NumPyPandas&#xff1a;高性能數據處理的黃金組合 目錄 #mermaid-svg-x3ndEE4hrhO6WR6H {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-x3ndEE4hrhO6WR6H .error-icon{fill:#552222;}#mermaid-svg-x3ndEE4hr…

swagger使用指引

1.swagger介紹 在前后端分離開發中通常由后端程序員設計接口&#xff0c;完成后需要編寫接口文檔&#xff0c;最后將文檔交給前端工程師&#xff0c;前端工程師參考文檔進行開發。 可以通過一些工具快速生成接口文檔 &#xff0c;本項目通過Swagger生成接口在線文檔 。 什么…

DeepSeek API文檔解讀(對話模塊)

對話&#xff08;Chat&#xff09; 對話補全 報文message對象數組 System message name 一個在線聊天系統&#xff0c;其中涉及多個用戶和一個系統管理員。在這個系統中&#xff0c;每個用戶都可以發送消息&#xff0c;并且系統管理員可以監控和回復這些消息。為了區分不同…

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.19 線性代數核武器:BLAS/LAPACK深度集成

2.19 線性代數核武器&#xff1a;BLAS/LAPACK深度集成 目錄 #mermaid-svg-yVixkwXWUEZuu02L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yVixkwXWUEZuu02L .error-icon{fill:#552222;}#mermaid-svg-yVixkwXWUEZ…

Linux——文件與磁盤

1. 磁盤結構 磁盤在我們的計算機中有著重要的地位&#xff0c;當文件沒有被打開時其數據就存儲在磁盤上&#xff0c;要了解磁盤的工作原理先要了解磁盤的結構。 1.1 磁盤的物理結構 以傳統的存儲設備機械硬盤為例&#xff0c;它通過磁性盤片和磁頭來讀寫數據。磁盤內部有多個旋…

【Envi遙感圖像處理】010:歸一化植被指數NDVI計算方法

文章目錄 一、NDVI簡介二、NDVI計算方法1. NDVI工具2. 波段運算三、注意事項1. 計算結果為一片黑2. 計算結果超出范圍一、NDVI簡介 歸一化植被指數,是反映農作物長勢和營養信息的重要參數之一,應用于遙感影像。NDVI是通過植被在近紅外波段(NIR)和紅光波段(R)的反射率差異…

UE虛幻引擎No Google Play Store Key:No OBB found報錯如何處理

UE虛幻引擎No Google Play Store Key&#xff1a;No OBB found報錯如何處理&#xff1f; 問題描述&#xff1a; UE成功打包APK并安裝過后&#xff0c;啟動應用時提示&#xff1a; No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …

C++并發編程指南04

文章目錄 共享數據的問題3.1.1 條件競爭雙鏈表的例子條件競爭示例惡性條件競爭的特點 3.1.2 避免惡性條件競爭1. 使用互斥量保護共享數據結構2. 無鎖編程3. 軟件事務內存&#xff08;STM&#xff09; 總結互斥量與共享數據保護3.2.1 互斥量使用互斥量保護共享數據示例代碼&…

【Redis】主從模式,哨兵,集群

主從復制 單點問題&#xff1a; 在分布式系統中&#xff0c;如果某個服務器程序&#xff0c;只有一個節點&#xff08;也就是一個物理服務器&#xff09;來部署這個服務器程序的話&#xff0c;那么可能會出現以下問題&#xff1a; 1.可用性問題&#xff1a;如果這個機器掛了…

Vue.js 如何選擇合適的組件庫

Vue.js 如何選擇合適的組件庫 大家在開發 Vue.js 項目的時候&#xff0c;都會面臨一個問題&#xff1a;我該選擇哪個組件庫&#xff1f; 市面上有很多優秀的 Vue 組件庫&#xff0c;比如 Element Plus、Vuetify、Quasar 等&#xff0c;它們各有特點。選擇合適的組件庫&#xf…

寒假(一)

請使用消息隊列實現2個終端之間互相聊天 終端一 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h&g…

java項目驗證碼登錄

1.依賴 導入hutool工具包用于創建驗證碼 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.5.2</version></dependency> 2.測試 生成一個驗證碼圖片&#xff08;生成的圖片瀏覽器可…

4 前端前置技術(中):node.js環境

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言 前言

BUU14 [極客大挑戰 2019]PHP1

用dirsearch掃描文件&#xff0c;掃了一萬年什么也沒掃出來 從網上看的wp&#xff0c;他們掃出來www.zip 這里直接用上了&#xff0c;以后有空再掃一遍 下載www.zip 在index.php中 說明要輸入select 打開class.php <?php include flag.php;error_reporting(0);class…

7-9 乘法口訣數列

本題要求你從任意給定的兩個 1 位數字 a1? 和 a2? 開始&#xff0c;用乘法口訣生成一個數列 {an?}&#xff0c;規則為從 a1? 開始順次進行&#xff0c;每次將當前數字與后面一個數字相乘&#xff0c;將結果貼在數列末尾。如果結果不是 1 位數&#xff0c;則其每一位都應成為…

20250202在Ubuntu22.04下使用Guvcview錄像的時候降噪

20250202在Ubuntu22.04下使用Guvcview錄像的時候降噪 2025/2/2 21:25 聲卡&#xff1a;筆記本電腦的攝像頭自帶的【USB接口的】麥克風。沒有外接3.5mm接口的耳機。 緣起&#xff1a;在安裝Ubuntu18.04/20.04系統的筆記本電腦中直接使用Guvcview錄像的時候底噪很大&#xff01; …

使用React和Material-UI構建TODO應用的前端UI

使用React和Material-UI構建TODO應用的前端UI 引言環境準備代碼解析1. 導入必要的模塊2. 創建React組件3. 定義函數3.1 獲取TODO列表3.2 創建TODO項3.3 更新TODO項3.4 刪除TODO項3.5 處理編輯點擊事件3.6 關閉編輯對話框3.7 保存編輯內容 4. 使用Effect鉤子5. 渲染組件 功能實現…

藍橋杯思維訓練營(三)

文章目錄 題目詳解680.驗證回文串 II30.魔塔游戲徒步旅行中的補給問題觀光景點組合得分問題 題目詳解 680.驗證回文串 II 680.驗證回文串 II 思路分析&#xff1a;這個題目的關鍵就是&#xff0c;按照正常來判斷對應位置是否相等&#xff0c;如果不相等&#xff0c;那么就判…

重生之我在異世界學編程之C語言:深入指針篇(上)

大家好&#xff0c;這里是小編的博客頻道 小編的博客&#xff1a;就愛學編程 很高興在CSDN這個大家庭與大家相識&#xff0c;希望能在這里與大家共同進步&#xff0c;共同收獲更好的自己&#xff01;&#xff01;&#xff01; 本文目錄 引言正文&#xff08;1&#xff09;內置數…