我是小学生 • 1天前
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;
}
评论:
请先登录,才能进行评论