返回题解分享
讨论 / 题解分享/ 帖子详情

质数判断 - 题解

#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 整除的数

// 只需检查到 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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!