1. 程式人生 > >codeforces1025B_Weakened Common Divisor

codeforces1025B_Weakened Common Divisor

數論的題啊…
給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; }