#include<bits/stdc++.h>
using namespace std;
#define int long long
int p[100];
signed main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++)
cin>>p[i];
int res=0;//答案
for(int i=1;i< 1<<m ;i++)//遍历1~11111111(m个1)所有数 用第k位数为零还是1来判断该集合有无选中
{
int t=1;//质数乘积
int s=0;//选中集合的次数
for(int j=0;j<m;j++)
{
if(i>>j&1) //选中
{
if(t*p[j]>n)//如果超出n说明不会有数被同时整除
{
t=-1;
break;
}
s++;
t=t*p[j];//记录乘积
}
}
if(t==-1) continue;
if(s&1)
res+=n/t;
else res-=n/t;
}
cout<<res;
}
容斥原理(模板)
最新推荐文章于 2024-08-15 05:02:54 发布