题意:
输入n,m以及m个数,输出在1~n中能被m个数的其中一个整除的数的数量
解题思路:
用一个数组记录这m个数,以及其中的2个,3个。。。m个数的最小公倍数
能被奇数个数的最小公倍数整除的用+,偶数个用减
#include <iostream>
using namespace std;
#define ll __int64
ll a[2000],b[15];
int gcd(int a,int b)
{
if(b==0) return a;
else gcd(b,a%b);
}
int main()
{
ll n,m;
while(cin>>n>>m)
{
ll k=1;
a[0]=-1;
for(ll i=0;i<m;i++) cin>>b[i];
for(ll i=0;i<m;i++)
{
ll l=k;
if(b[i]==0) continue;
for(ll j=0;j<l;j++)
{
int pi;
if(a[j]<0) pi=-a[j];
else pi=a[j];
int t = gcd(pi,b[i]);
a[k++] = -1*a[j]/t*b[i];
}
}
ll ans=0;
for(ll i=1;i<k;i++)
{
ans = ans+(n-1)/a[i];
// cout<<a[i]<<" ";
}
cout<<ans<<endl;
}
return 0;
}