1. 程式人生 > >Codeforces 1025B Weakened Common Divisor(思維)

Codeforces 1025B Weakened Common Divisor(思維)

提取 ble pac tmp ref ORC problem 思維 com

題目鏈接:CF 1025B

題意:給定n個二元組(ai,bi),定義WCD為能整除n個二元組每組中至少一個的數,求WCD。

題解:我們先求出能整除n個二元組ai*bi的GCD(代表了ai和bi兩者),如果得到的GCD!=1,我們再對這n個二元組去提取,GCD與ai和bi進行gcd,可以認為是一個縮化,如果為1代表我們實際去求答案的時候不選擇該數;否則說明無法找到這樣的值,輸出-1。

 1 #include <cstdio>
 2 using namespace std;
 3 
 4 typedef long long LL;
 5 LL gcd(LL a,LL b){
 6     return
b==0?a:gcd(b,a%b); 7 } 8 9 const int N=2e5+10; 10 LL a[N],b[N]; 11 12 int main(){ 13 int n; 14 scanf("%d",&n); 15 LL c=0; 16 for(int i=1;i<=n;i++){ 17 scanf("%lld%lld",&a[i],&b[i]); 18 c=gcd(c,a[i]*b[i]); 19 } 20 if(c==1) printf("-1\n"); 21 else
{ 22 for(int i=1;i<=n;i++){ 23 LL tmp=gcd(c,a[i]); 24 if(tmp>1) c=tmp; 25 tmp=gcd(c,b[i]); 26 if(tmp>1) c=tmp; 27 } 28 printf("%lld\n",c); 29 } 30 return 0; 31 }

Codeforces 1025B Weakened Common Divisor(思維)