四個基本的計數原理

2021-07-03 15:54:44 字數 1029 閱讀 3220

《introductory combinatorics fifth edition》學習筆記:

四個基本計數原理:

@加法原理:設集合s劃分為兩兩互不相交的各個部分s1,s2,s3……sn,那麼s的元素總個數等於各個部分的總個數之和。即|s|=|s1|+|s2|+……+|sn|.(如果允許子部分相交,則需要用容斥原理來解決)使用加法原理的技巧是:把原集合分割成容易處理的少量子集。

例子:一名學生想要選修一門數學課程和一門計算機的課程,數學課程有三門可供他選擇,計算機課程有四門可以選擇,那麼該學生有多少種選擇?

s=s1+s2=3+4=7

@乘法原理:設s是有序對(a,b)的集合,a來自大小為p的集合s1,對於每乙個a都有q個不同的b元素和其對應。於是|s|=p*q

例子:確定乙個正整數的正因子的總個數?

分析:乙個正整數可以進行唯一的素因子分解,比如12=2^2*3,那麼12的正因子為2的指數總個數和3的指數總個數之積;3*2=6.

#include #include#includeusing namespace std;

typedef long long ll;

const int maxn=1e8+1,maxn2=1e7;

int pri[maxn2],top=0,pow[maxn2];

bool notpri[maxn];

void getpri(),稱a'是a在u中的補集。|a|=|u|-|a'|.

例子:有多少個各位數字互不相同且不為0的兩位數?

用乘法原理做:9*8=72.

減法原理做:兩位數字一共有90個(99-9=90),存在位數有0的有(10,20……90)9個,位數相同的兩位數有(11,22,33……99)9個,所以滿足條件的一共有90-9-9=72個。

@除法原理:如果知道了s中的物件數目以及各部分所含物件數目的共同值,就可以確定部分的數目。k=|s|/|s(k)|.

例子(嚴格的說是排列的例子): 數字1,1,1,3,8能夠構造多少個不同的5位數?

s=a(5,5)/a(3,3)=5*4=20.(用乘法原理同樣能分析出來)

C 的四個基本技巧

1 如果可能盡量使用介面來程式設計 net框架包括類和介面,在編寫程式的時候,你可能知道正在用.net的哪個類。然而,在這種情況下如果你用.net支援的介面而不是它的類來程式設計時,會變得更加穩定 可用性會更高。請分析下面的 private void loadlist object items,li...

C 的四個基本技巧

1 如果可能盡量使用介面來程式設計 net框架包括類和介面,在編寫程式的時候,你可能知道正在用.net的哪個類。然而,在這種情況下如果你用.net支援的介面而不是它的類來程式設計時,會變得更加穩定 可用性會更高。請分析下面的 private void loadlist object items,li...

C 的四個基本技巧

1 如果可能盡量使用介面來程式設計 net框架包括類和介面,在編寫程式的時候,你可能知道正在用.net的哪個類。然而,在這種情況下如果你用.net支援的介面而不是它的類來程式設計時,會變得更加穩定 可用性會更高。請分析下面的 private void loadlist object items,li...