hdu 1796How many integers can you find #include<iostream> using namespace std; int hash[11],N,M,a[11],flag=0; __int64 lcm(__int64 a,__int64 b) { __int64 c,num1,num2; num1=a; num2=b; do { c=a%b; a=b; b=c; }while(c); return (num1/a)*num2; } void dfs(int i,int n,int count,__int64 &s){ if(count==n){ __int64 g=1; for(int j=0;j<M-flag;j++){ if(hash[j]){ g=lcm(g,a[j]); } } if(n&1) s+=(N-1)/g; else s-=(N-1)/g; return; } for(;i<M-flag;i++){ if(!hash[i]){ hash[i]=1; dfs(i+1,n,count+1,s); hash[i]=0; } } } int main(){ while(cin>>N>>M){ int i,b,j; flag=0; for(i=0,j=0;i<M;i++){ cin>>b; if(b==0) flag=1; else a[j++]=b; } __int64 sum=0; for(i=1;i<=M-flag;i++){ memset(hash,0,sizeof(hash)); dfs(0,i,0,sum); } printf("%I64d/n",sum); } return 0; }