2 条题解
-
0
#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;
}
信息
- ID
- 98
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 161
- 已通过
- 49
- 上传者