N-GCD

 

题目链接:https://www.nowcoder.com/practice/97142035f7d2443c91a3ffc343ad691d?tpId=122&&tqId=33724&rp=1&ru=/ta/exam-wangyi&qru=/ta/exam-wangyi/question-ranking

题目描述

小明很喜欢数对,又很喜欢GCD(最大公约数)。所以他想尽办法创造了一种全新的最大公约数:
给出若干个数对(ai,bi),如果一个最大的质数x可以整除每一个数对中的至少一个数字并且这个数字大于1,那么x就称为这些数对的N-GCD。
现在小明给了你一些数对,希望你可以算出它们的N-GCD。
 

输入描述:

 

第一行一个数字n,表示数对的个数。

接下来n行,每行两个数字,用一个空格分隔,表示一个数对。

满足1<=n <=150000,1<=ai,bi<=2 * 10^9。

 

输出描述:

一个数字,这些数对的N-GCD;若N-GCD不存在,那么输出-1。
示例1

输入


3
2 2
3 6
7 8

输出


2
示例2

输入


2
18 12
3 24

AC代码:
#include<bits/stdc++.h>
using namespace std;
bool P(int n)
{
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0) return false;
    }
    return true;
}
int main()
{
    int n;
    cin>>n;
    int a[n],b[n],m=INT_MAX,i;
    for(i=0;i<n;i++)
    {
        cin>>a[i]>>b[i];
        m=min(m,a[i]);
        m=min(m,b[i]);    
    }
    while(m>1)
    {
        if((!P(m))||((m&1==0)&&m>2))
        {
            m--;
            continue;
        }
        bool flag=true;
        for(i=0;i<n;i++)
        {
            if(!((a[i]%m==0)||(b[i]%m==0)))
            {
                flag=false;
                break;
            }
        }
        if(flag)break;
        else m--;
    }
    cout<<((m==1)?-1:m)<<endl; 
}

 

思路来源:

 


 

 
posted @ 2020-08-01 19:04  龙龙666666  阅读(202)  评论(1编辑  收藏  举报