CF1025B Weakened Common Divisor 题解

Content

定义 \(n\) 个数对 \((a_1,b_1),(a_2,b_2),(a_3,b_3),...,(a_n,b_n)\)\(\text{WCD}\) 为能够整除每个数对中至少一个数的 \(>1\) 的整数。现在,给出 \(n\) 个数对,请找出它们的 \(\text{WCD}\),或者这 \(n\) 个数对没有符合要求的 \(\text{WCD}\)

数据范围:\(1\leqslant n\leqslant 1.5\times 10^5,2\leqslant a_i,b_i\leqslant 2\times 10^9\)

Solution

我们先把第一个数对的质因子分解出来,然后再在后面找是否有不能够满足条件的质因子,有的话就删除,否则就保留着。最后看是否还有剩下的质因子即可。

Code

int n, pr[150007];

int main() {
	n = Rint;
	F(i, 1, n) {
		int x = Rint, y = Rint;
		if(i == 1) {
			F(j, 2, sqrt(x)) if(!(x % j)) {pr[++pr[0]] = j; while(!(x % j)) x /= j;}
			if(x != 1) pr[++pr[0]] = x;
			F(j, 2, sqrt(y)) if(!(y % j)) {pr[++pr[0]] = j; while(!(y % j)) y /= j;}
			if(y != 1) pr[++pr[0]] = y;
		} else F(j, 1, pr[0]) if(!pr[j]) continue; else if(x % pr[j] && y % pr[j]) pr[j] = 0;
	}
	F(i, 1, pr[0]) if(pr[i]) return printf("%d", pr[i]), 0;
	printf("-1");
	return 0;
}
posted @ 2021-12-16 14:53  Eason_AC  阅读(23)  评论(0)    收藏  举报