给定一个整数 n 和 m个不同的质数 p1,p2,…,pm。
请你求出 1∼n中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。
输入格式
第一行包含整数 n 和 m。
第二行包含 m 个质数。
输出格式
输出一个整数,表示满足条件的整数的个数。
数据范围
1≤n≤10^5
输入样例:
3
输出样例:
5
引用别人的思路:
#include<bits/stdc++.h>
using namespace std;
#define fp(i,a,b) for(int i=a;i<=b;i++)
#define PII pair<int,int>
typedef long long ll;
typedef double db;
const int N=1e6+10;
const int M=20;
const int mod=1e9+7;
int n,m;
int p[M];
void solve()
{
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 s=0;
for(int j=0;j<m;j++)
{
if(i >> j & 1){
if((ll)t*p[j]>n){
t=-1;
break;
}
s++;
t*=p[j];
}
}
if(t==-1)continue;
if(s&1)res+=n/t;
else res-=n/t;
}
cout<<res<<"\n";
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int T;
// cin>>T;
T=1;
while(T--){
solve();
}
return 0;
}