#include <iostream>
#include <cmath>
bool isPrime(int n) {
if (n <= 1) return false; // 0 和 1 不是质数
if (n <= 3) return true; // 2 和 3 是质数
if (n % 2 == 0 || n % 3 == 0) return false; // 排除能被 2 和 3 整除的数
}
int secondLargestFactor(int n) {
int factor = 1;
// 首先找到最小的因子(除了 1)
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0 && n / i > factor) {
factor = n / i;
}
}
return factor;
}
int main() {
int n;
std::cin >> n;
}
#include <cmath>
bool isPrime(int n) {
if (n <= 1) return false; // 0 和 1 不是质数
if (n <= 3) return true; // 2 和 3 是质数
if (n % 2 == 0 || n % 3 == 0) return false; // 排除能被 2 和 3 整除的数
// 只需检查到 sqrt(n),因为如果 n 不是质数,它必有一个因子小于或等于 sqrt(n)
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;}
int secondLargestFactor(int n) {
int factor = 1;
// 首先找到最小的因子(除了 1)
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0 && n / i > factor) {
factor = n / i;
}
}
return factor;
}
int main() {
int n;
std::cin >> n;
if (isPrime(n)) {
std::cout << "YES" << std::endl;
} else {
int secondLargest = secondLargestFactor(n);
std::cout << secondLargest << std::endl;
}
return 0;}
0 回复
0 转发
0 喜欢
3 阅读



