给定一个整数 𝑛 和 𝑚 个不同的质数 𝑝1,𝑝2,…,𝑝𝑚。
请你求出 1∼𝑛 中能被 𝑝1,𝑝2,…,𝑝𝑚 中的至少一个数整除的整数有多少个。
输入格式
第一行包含整数 𝑛 和 𝑚。
第二行包含 𝑚 个质数。
输出格式
输出一个整数,表示满足条件的整数的个数。
数据范围
1≤𝑚≤16,
1≤𝑛,𝑝𝑖≤
输入样例:
10 2
2 3
输出样例:
7
代码:
#include<iostream>
using namespace std;const int N = 20;
int p[N];
int n,m;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;int cnt = 0;for(int j = 0;j < m;j ++){if(((i >> j) & 1) == 1){cnt ++;if((long long) p[j] * t > n){t = -1;break;}t *= p[j];}}if(t != -1){if(cnt % 2 == 0){res -= n / t;}else{res += n / t;}}}cout<<res<<endl;return 0;
}