给定一个整数 𝑛 和 𝑚 个不同的质数 𝑝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;
}