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。
示例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; }
思路来源: