zoukankan      html  css  js  c++  java
  • E

    这是一个很有意思的题目,题目大意比较简单,当给出的n个数两两互质时,输出“pairwise coprime”,否则至少存在两个数不互质并且所有数的GCD=1,那么输出”setwise coprime“,如果说这俩条件都不满足的话,那就输出“not coprime”。

    题解:这个问题可以转化为如何判断n个数两两互质,也就是说每两个数不存除1之外的公因数。我们注意到数据范围是1e6,暴力o(n^2)肯定是不行的。该怎么优化呢?

      注意到“每两个数不存除1之外的公因数”,我们可以枚举公因数i,那么如果说一个数含有i这个因子,那么他一定是i的整数倍。然后我们用一个数组num保存每个数出现的次数,当枚举公因子i的时候,在加一个循环来枚举i的倍数 x=i*k 。(最大是x最大是1e6)。然后累加num[x],如果大于1的话,那就说明至少存在两个数,他们的公因子为i。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+3;
    int num[N];
    int main(){
        int n,x;
        cin>>n;
        int z=0;
        for(int i=1;i<=n;i++){
            cin>>x;
            num[x]++;
            z=__gcd(z,x);
        }
        if(z!=1){
            cout<<"not coprime"<<endl;
            return 0;
        }
        
        for(int i=2;i<N;i++){
            int cnt=0;
            for(int j=i;j<N;j+=i){
                cnt+=num[j];
            }
            if(cnt>1) {
                cout<<"setwise coprime"<<endl;
                return 0;
            }
        }
        cout<<"pairwise coprime"<<endl;
        return 0;
    }
  • 相关阅读:
    003_&#x和ASCII的关系及URL中的中文转义
    001_机器学习的Hello world之MNIST手写数字识别模型
    Appnium安装-Mac平台
    Code Review 规范
    Spring AOP-xml配置
    JTLParser-linux上jmeter的jtl文件二次分析
    测试覆盖率Emma工具使用
    jmeter之java请求
    jmeter测试总结
    jstat监控gc情况
  • 原文地址:https://www.cnblogs.com/Accepting/p/13586739.html
Copyright © 2011-2022 走看看