codeforces1025B_Weakened Common Divisor
阿新 • • 發佈:2019-01-01
數論的題啊…
給n對數,找出一個數是滿足是n對數裡至少一個數的因子,稱為wcd
一般這種題就是gcd lcm 素因子什麼的
所以我們用第一對數的兩個數不斷去和接下來的n-1對數的乘積取gcd,因為兩個數的乘積就包含了這兩個數的因子了,這樣求出來最後再取個最大的,判斷是否大於1,如果是,找出一個因子即可
程式碼:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+50;
int n;
ll aa,bb;
ll a[N],b[N];
int main(void ){
scanf("%d",&n);
scanf("%lld%lld",&aa,&bb);
for(int i=1;i<n;i++){
scanf("%lld%lld",&a[i],&b[i]);
aa=__gcd(aa,a[i]*b[i]);
bb=__gcd(bb,a[i]*b[i]);
}
ll d=max(aa,bb);
if(d>1){
//輸出因子
for(ll i=2;i*i<=d;i++){
if (d%i==0){
printf("%lld\n",i);
return 0;
}
}
printf("%lld\n",d);
}else{
printf("-1\n");
}
return 0;
}