1 条题解
-
0Guest LV 0 MOD
-
1
#include<cstdio> #include<iostream> using namespace std; const int maxn=1e4+10; int n,a[maxn],num[maxn]; long long ans,c[maxn]; int main(){ for(int i=4;i<=maxn;i++) c[i]=(long long)i*(i-1)*(i-2)*(i-3)/24; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; num[a[i]]=1; } for(int i=1;i<=n;i++) for(int j=2;j*j<=a[i];j++) if(a[i]%j==0){ num[j]++; num[a[i]/j]++; if(j*j==a[i]) num[a[i]/j]--; } ans=c[n]; for(int i=1;i<=maxn;i++){ bool pd=false; for(int j=2;j*j<=i;j++) if((i%j==0)&&(i/j%j==0)){ pd=true; break; } if(pd) continue; int cnt=0,x=i; for(int j=2;j*j<=x;j++) if(x%j==0){ cnt++; while(x%j==0) x/=j; } if(x!=1) cnt++; if(cnt&1) ans-=c[num[i]]; else ans+=c[num[i]]; } cout<<ans; return 0; } /*容斥原理 */
- 1