1. 程式人生 > 其它 >容斥原理

容斥原理

技術標籤:acwing演算法容斥原理離散數學

容斥原理

在這裡插入圖片描述

能被整除的數

這道題是典型的利用容斥原理的題目
由於題目中所給的都是質數,因此在求交集的時候可以直接相乘求交集
這裡判斷哪個數選到哪個數沒有選到可以DFS也可以二進位制列舉
這裡給出二進位制列舉的做法

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=20;
int n,m;
int p[N];
int main()
{
    cin>>n>>m;
    for(int i=0;i<
m;i++) cin>>p[i]; int res=0; for(int i=1;i<(1<<m);i++) { int t=1,cnt=0; for(int j=0;j<m;j++) { if(i>>j&1) { cnt++; if((ll)t*p[j]>n) { t=-1; break
; } t*=p[j]; } } if(t!=-1) { if(cnt%2) res+=n/t; else res-=n/t; } } cout<<res<<endl; return 0; }