890. 能被整除的数
题目链接https://www.acwing.com/problem/content/892/
题目:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
int main(){
int n;
int m;
cin>>n>>m;
int a[17];
for(int i=0;i<m;i++){
cin>>a[i];
}
int res=0;
for(int i=1;i<1<<m;i++){
int t=1;//判断质数之积是否超过n
int sum=0;//判断i中有几个1
int flag=1;
for(int j=0;j<m;j++){
if(i>>j&1){
if((LL)t*a[j]>n){
flag=0;
break;
}
sum++;
t*=a[j];
}
}
if(!flag) continue;
if(sum&1)res+=n/t;
else res-=n/t;
}
cout<<res;
return 0;
}