
容斥原理,加奇减偶
差不多就是
另外
所以可以枚举每一位选或不选来暴力算
- #include
- #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- #define endl '\n'
-
- using namespace std;
-
- typedef pair<int, int> PII;
- typedef long long ll;
- typedef long double ld;
-
- ll n, m;
- int a[20];
- ll ans = 0;
-
- void dfs(int num, int k)
- {
- if(num == m - 1)
- {
- int cnt = 0;
- ll res = 1;
- for(int i = 0; i < m; i ++)
- {
- if(k >> i & 1)
- {
- res *= a[i];
- if(res > n)return;
- cnt ++;
- }
- }
- if(!cnt)return;
-
- if(cnt % 2)ans += n / res;
- else ans -= n / res;
- return;
- }
-
- dfs(num + 1, k + (1 << num + 1));
- dfs(num + 1, k);
- }
-
- int main()
- {
- IOS
- cin >> n >> m;
- for(int i = 0; i < m; i ++)cin >> a[i];
-
- dfs(0, 1);
- dfs(0, 0);
-
- cout << ans;
-
- return 0;
- }