//HDU - 1796
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cctype>
#include<algorithm>
#include<vector>
#include<set>
#include<deque>
using namespace std;
long long gcd(long long a,long long b){
return b?gcd(b,a%b):a;
}
long long lcm(long long a,long long b){
return a*b/gcd(a,b);
}
int shz[11];
vector<int> vect;
void dis(){
for(int i=0;i<vect.size();i++){
cout<<vect[i]<<" ";
}
cout<<endl;
}
int main(){
int n,m;
while(cin>>n>>m){
long long ans=0;
int tm=0,ts,jud=0;
for(int i=0;i<m;i++){
cin>>ts;
if(ts)
shz[tm++]=ts;
else
jud=1;
}
if(jud){
m--;
}
for(int s=1;s<(1<<m);s++){
vect.clear();
for(int c=0;c<m;c++){
if(s&(1<<c))
vect.push_back(shz[c]);
}
long long tmp=1;
for(int i=0;i<vect.size();i++)
tmp=(tmp,lcm(tmp,vect[i]));
long long tot=vect.size();
if(tot&1){
ans+=(long long)(n-1)/tmp;
}
else {
ans-=(long long)(n-1)/tmp;
}
}
cout<<ans<<endl;
}
return 0;
}
容斥原理
最新推荐文章于 2023-09-06 17:21:18 发布