joshua分享 简单题:先打素数表,再从最小值的那个开始从最大素数开始判断
#include <bits/stdc++.h> using namespace std; int main(void) { int n, i, j, tMin = 0x7fffffff; vector<int> chart(50001, 1); vector<int> prim; cin >> n; vector<vector<int>> arr(n, vector<int>(2, 0)); for(i = 0; i < n; i++) { cin >> arr[i][0] >> arr[i][1]; // 找出n对数据中的最小值 tMin = min(tMin, min(arr[i][0], arr[i][1])); } // 打表,找出<=50000的的所有素数,并依次放到prim数组中 for(chart[1] = 0, i = 2; i < chart.size(); i++) { if(chart[i]) { prim.push_back(i); // 依次把素数放进去 for(j = i*i; j < chart.size(); j += i) chart[j] = 0; } } // 初始化,从最大可能满足条件的素数开始递减 for(i = 0; i < prim.size(); i++) if(prim[i] >= tMin) break; // 开始查找 while(i >= 0) { for(j = 0; j < n; j++) { if(arr[j][0] % prim[i] == 0 || arr[j][1] % prim[i] == 0); else break; } if(j == n) break; i--; } if(j == n) cout << prim[i] << endl; else cout << -1 << endl; return 0; }