AC

我是小学生  •  1天前


include <bits/stdc++.h>

using namespace std; const int MAX = 20000; vector ss; bool is_ss[MAX + 1];

// 生成2到20000的所有素数 void sieve() {

memset(is_ss, 1, sizeof(is_ss));
is_ss[0] = is_ss[1] =0;
for (int i = 2; i * i <= MAX; ++i) {
	if (is_ss[i]) {
		for (int j = i * i; j <= MAX; j += i) {
			is_ss[j] =0;
		}
	}
}
// 收集所有素数
for (int i = 2; i <= MAX; ++i) {
	if (is_ss[i]) {
		ss.push_back(i);
	}
}

}

// 计算x的最大素因子 int max_ss(int x) {

if (x == 1) {
	return 0;
}
// 从最大的素数开始检查,找到能整除x的最大素数
for (auto it = ss.rbegin(); it != ss.rend(); ++it) {
	int p = *it;
	if (p > x) {
		continue;
	}
	if (x % p == 0) {
		return p;
	}
}
return 0; // 理论上不会执行到这里

}

int main() {

sieve(); // 预处理素数
int N;
cin >> N;
int max_p = -1; // 记录最大的素因子
int result = 0; // 记录具有最大素因子的序列号

for (int i = 0; i < N; ++i) {
	int x;
	cin >> x;
	int current_p = max_ss(x);
	// 更新最大素因子和对应的序列号
	if (current_p > max_p) {
		max_p = current_p;
		result = x;
	}
}
if (max_p == 0) {
	cout << 0 << endl;
} else {
	cout << result << endl;
}

return 0;

}


评论:

请先登录,才能进行评论