/ WHOJ / 题库 / 破译 /

题解

1 条题解

  • 1
    @ 2022-09-03 20:13:41
    #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

信息

ID
1628
难度
9
分类
数学 点击显示
标签
递交数
1
已通过
1
通过率
100%
上传者