Random

Random

https://ac.nowcoder.com/acm/contest/120563/B

链接:https://ac.nowcoder.com/acm/contest/120563/B 来源:牛客网 题目概述 给定一个长度为 n 的数组,需要找到任意两个不同位置的元素,使得它们的最大公约数大于 1。存在则输出这两个元素的值,否则输出 -1。 思路分析 简单思考可知,只要两个数有任何一个公共质因子,它们的 gcd 就会大于 1。而题目不要求最优或特定解,只需找到任意一对即可,这意味着一旦发现符合条件的数对,就可以立刻终止。因此,暴力枚举是简单且有效的解法。 总结概括 这道题的核心不在于精巧的数论变换,而在于审题后选择最简单直接的路径。我的代码用二重循环加 gcd,以最朴素的方式完成了任务——它不追求极致的最坏情况复杂度,却在实际评测中干净利落地通过。一句话,枚举数对求公因,找到即止快如风。 C++代码展示如下:

#include <bits/stdc++.h>
using namespace std;
long long gcd(long long x,long long y) {
	while(y) {
		long long t=x%y;
		x=y;
		y=t;
	}
	return x;
}
int main() {
	int T;
	scanf("%d",&T);
	for(int i=0; i<T; i++) {
		long long n;
		long long J=-1,K=-1;
		scanf("%lld",&n);
		vector<long long> a(n);
		for(long long j=0; j<n; j++) {
			scanf("%lld",&a[j]);
		}
		bool f=false;
		for(long long j=0; j<n&&!f; j++) {
			for(long long k=j+1; k<n&&!f; k++) {
				if(gcd(a[j],a[k])>1) {
					J=j,K=k;
					f=true;
					break; 
				}
			}
		}
		if(f) {
			printf("%lld %lld\n",a[J],a[K]);
		} else {
			printf("-1\n");
		}
	}
	return 0;
}
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务