zoukankan      html  css  js  c++  java
  • cf round 505(div1+div2)based on VK cup 2018 final B. Weakened Common Divisor

    题意是给了n组数,从每组数里挑一个数出来,求他们的因子,如果没有因子(也就是因子为1)的话就输出-1,如果有多个因子,输出一个就行。

           是我们先输入第一组的a和b,然后输入2-n组的x和y,分别更新a = gcd(a, x * y), b = gcd(b, x * y);当a和b都等于1的时候说明没有符合题意的因子,输出-1,否则输出a或b中不等于1的数的一个因子即可。第二种方法是我们分别求出a和b的质因子,然后暴力去枚举每一组数据。
           把a和b的质因子都列举出来,然后到剩下的N-1组数据中判断,一旦发现有一个质因子能满足被n-1组数据的任意一个数整除,就输出。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main()
    {
        int n;
        scanf("%d",&n);
        ll a,b;
        scanf("%lld%lld",&a,&b);
        for(int i=2;i<=n;i++)
        {
            ll x,y;
            scanf("%lld%lld",&x,&y);
            a=__gcd(x*y,a);
            b=__gcd(x*y,b);
        }
        if(a>1)
        {
            for(int i=2;i*i<=a;i++)
            {
                if(a%i==0)
                {
                    printf("%d
    ",i);
                    return 0;
                }
            }
            printf("%d
    ",a);
        }
        else if(b>1)
        {
            for(int i=2;i*i<=b;i++)
            {
                if(b%i==0)
                {
                    printf("%d
    ",i);
                    return 0;
                }
            }
            printf("%d
    ",b);
        }
        else
        {
            printf("-1
    ");
        }
    }
    #include <bits/stdc++.h>
    #define maxn 150005
    using namespace std;
    int a[maxn],b[maxn];
    int pre[maxn];
     
    int n;
     
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d%d",&a[i],&b[i]);
        }
      int num = 0;
        for(int i = 2; i * i <= a[0]; i++){
        if(a[0] % i == 0){
          pre[num++] =  i;
                while(a[0] % i == 0)a[0] /= i;
        }
      }
        if(a[0] > 1) pre[num++] = a[0];
      for(int i = 2; i * i <= b[0]; i++){
        if(b[0] % i == 0){
          pre[num++] =  i;
                while(b[0] % i == 0)b[0] /= i;
        }
      }
        if(b[0] > 1)pre[num++] = b[0];
        for(int i = 0; i < num; i++){
        int flag = 0;
        for(int j = 1; j < n; j++){
          if(a[j] % pre[i] != 0 && b[j] % pre[i] != 0){
            flag = 1;
            break;
          }
        }
        if(flag == 0){
          cout<<pre[i]<<endl;
          return 0;
        }
      }
      puts("-1");
        return 0;
    }
  • 相关阅读:
    记录:VC++中打开保存目录选择对话框操作
    Active Server Pages 错误 ASP 0201 的最终解决办法
    已经阅读过的Ajax文章资源
    Delphi编译/链接过程
    初探Object Pascal的类(四)
    初探Object Pascal的类(九)
    初探Object Pascal的类(十)
    初探Object Pascal的类(五)
    初探Object Pascal的类(八)
    Delphi 7 IDE 界面
  • 原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10260638.html
Copyright © 2011-2022 走看看