Codeforces1025B.Weakened Common Divisor
阿新 • • 發佈:2018-12-11
題目大意:給出n對數字,要求求一個數,使得這個數是每對數中至少一個數的因子,題目可能出現多個符合要求的數,所以輸出一個符合的數就行了。
思路:將第一對數字a,b單獨拿出來,對其之後輸入的數字對(x,y)的積x*y用__gcd()求他們的最大公因子,並將結果重新覆蓋a,b,最後,因為我們是對x*y與a或b求的最大公因子,為了防止出現因子恰好分別出現在x與y中,而x*y卻恰好是a或b的倍數的情況出現,我們最後再求一次其最小因子。
程式碼:
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> typedef long long ll; using namespace std; ll f(ll k) { for(int i = 2; i <= sqrt(k);i++) { if(k % i == 0)return i; } return k; } int main() { ll n,a,b,x,y; cin>>n>>a>>b; for(int i = 1; i < n; i++) { cin>>x>>y; a = __gcd(x*y,a); b = __gcd(x*y,b); } if(max(a,b)==1) { cout<<"-1"<<endl; }else{ ll k; k = f(max(a,b)); cout<<k<<endl; } return 0; }