容斥原理——數學知識
容斥原理
可以描述如下:
要計算幾個集合並集的大小,我們要先將所有單個集合的大小計算出來,然後減去所有兩個集合相交的部分,再加回所有三個集合相交的部分,再減去所有四個集合相交的部分,依此類推,一直計算到所有集合相交的部分。
用維恩圖來表示集合A、B和C:
經典例題
AcWing 890. 能被整除的數
給定一個整數n和m個不同的質數p1,p2,…,pm。
請你求出1~n中能被p1,p2,…,pm中的至少一個數整除的整數有多少個。
輸入格式
第一行包含整數n和m。
第二行包含m個質數。
輸出格式
輸出一個整數,表示滿足條件的整數的個數。
資料範圍
1≤m≤16,
1≤n,pi≤109
輸入樣例:
10 2
2 3
輸出樣例:
7
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 20;
int p[N];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i ++ ) cin >> p[i];
int res = 0;
for (int i = 1; i < 1 << m; i ++ ) // i<1<<m 組合數 2^m-1
{
int t = 1, s = 0;//s用來記錄這種方案,選擇的數的個數,從而判斷應該加還是減;t存累乘的結果
for (int j = 0; j < m; j ++ )//遍歷二進位制的每一位
if (i >> j & 1)//判斷二進位制第j位是否存在
{
if ((LL)t * p[j] > n)//這裡要加long 否則會溢位
{
t = -1;
break;
}
t *= p[j];
s ++ ;
}//為這種方案求出一個總乘積t
if (t != -1)
{
if (s % 2) res += n / t;//奇數個數,說明要加
else res -= n / t;//偶數個數,說明要減
}
}
cout << res << endl;
return 0;
}
相關文章
- #19. 計數(容斥原理)
- 容斥原理
- 容斥原理學習筆記筆記
- 【模板】容斥原理
- 容斥原理講解
- 有標號DAG計數 [容斥原理 子集反演 組合數學 fft]FFT
- 遊戲裡面的容斥原理遊戲
- bzoj 2655: calc [容斥原理 伯努利數]
- HDU 4059 The Boss on Mars ( 容斥原理)
- HDU 4135 Co-prime(容斥原理+分解質因數)
- HDU4390Number Sequence(容斥原理)
- HDU4407Sum ( 容斥原理)
- 容斥
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- HDU2841 Visible Trees (容斥原理)
- CodeForces571A. Lengthening Sticks(組合數學-容斥)
- 「數學」助力每一個不知死活的容斥夢
- 反射容斥反射
- bzoj 3812: 主旋律 [容斥原理 狀壓DP]
- HDU 1695-GCD(容斥原理+尤拉函式)GC函式
- bzoj1853: [Scoi2010]幸運數字(容斥原理)
- 2014ACM/ICPC亞洲區西安站 F題 color (組合數學,容斥原理)ACM
- Min-Max 容斥學習筆記筆記
- 容斥 + 組合數學 ---Codeforces Round #317 A. Lengthening Sticks
- 彩票的數學知識
- Min-Max 容斥
- lg容斥與反演
- cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
- P1447 [NOI2010] 容斥原理
- [BZOJ4818][Sdoi2017][容斥原理][矩陣優化DP]序列計數矩陣優化
- HTML5中手勢原理分析與數學知識的實踐HTML
- 機器學習數學知識積累之高等數學微積分機器學習
- 跳出初學MySQL知識的原理整理(一)MySql
- 一些數學知識&題
- 數學知識巧學JCF(Java Collections framework)JavaFramework
- HDU 4135——Co-prime(容斥原理&&二進位制列舉)
- 機器學習數學知識積累總結機器學習
- 數學公式基礎知識(更新中...)公式