最近學習容斥原理,實現容斥原理大致有三種方法:dfs,佇列陣列,二進位制。
今天主要講下二進位制實現容斥原理:
有乙個集合,求集合的子集?很顯然答案為
也就是2^n個,也就是每乙個子集有唯一標誌符 i (0
**看下面的:
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9using
namespace
std;
10int prime[40000
],m;
11bool f[40000
];12 vectorp;//
存放質因數
13//
用篩法初始化40000以內的質數,將質數存放在prime陣列中,m記錄大小
14int
init()23}
24}25//
對n分解質因數
26void factor(int
n)35}36
if(n>1
) p.push_back(n);37}
38//
用二進位制實現容斥原理,求區間[1,r]內與n互素的數的個數
39int solve(int
r)50
int cur = r /mult;
51if (bits & 1)//
若1的個數是奇數則進行加法,否則進行減法
52 sum +=cur;
53else sum -=cur;54}
55return r - sum;//
用總的數目-與n不互素的個數56}
57int
main()
64return0;
65 }
容斥原理二進位制實現
最近學習容斥原理,實現容斥原理大致有三種方法 dfs,佇列陣列,二進位制。今天主要講下二進位制實現容斥原理 有乙個集合,求集合的子集?很顯然答案為 也就是2 n個,也就是每乙個子集有唯一標誌符 i 0 看下面的 1 include2 include3 include4 include5 includ...
容斥 二進位制UVA 11806
問題是求四個邊都有隊員的排列組合,根據容斥原理可以轉化為對立問題的求解 全集為s c n m,k 該區域有k個隊員的全部排列組合,a 最左邊沒有隊員的全部種數,b 最右邊沒有,c 最上邊沒有,d 最下邊沒有,則答案就是屬於全集s但不屬於 a,b,c,d中任何乙個集合,根據容斥 ans s a b c...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...