本题首先给出一个数n和m,以及m个数,要求从1到n内不是是m个数中任一个数的倍数的数的个数。
#include <iostream>
using namespace std;
long long gcd(long long a,long long b)
{
int s;
s=a%b;
while(s!=0)
{
a=b;
b=s;
s=a%b;
}
return b;
}
int main()
{
long long n,m,a[20],num,lcm,sum;
while(cin>>n>>m)
{
for(int i=0;i<=m-1;i++)
{
cin>>a[i];
}
sum=0;
for(int i=1;i<(1<<m);i++)
{
num=0;
lcm=1;
for(int j=0;j<m;j++)
{
if(i&(1<<j))
{
num++;
lcm=lcm*a[j]/gcd(lcm,a[j]);
}
}
if(num%2==1)
sum=sum+n/lcm;
else
sum=sum-n/lcm;
}
cout<<n-sum<<endl;
}
return 0;
}