提交时间:2026-01-04 15:26:54

运行 ID: 80674

#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n; cin >> n; // 估算一个足够大的上限:第10000个质数约104729,我们取大一些 const int MAX = 110000; // 或 200000 更安全 vector<bool> isPrime(MAX + 1, true); isPrime[0] = isPrime[1] = false; // 0和1不是质数 // 筛法 for (int i = 2; i * i <= MAX; i++) { if (isPrime[i]) { for (int j = i * i; j <= MAX; j += i) { isPrime[j] = false; // 标记i的倍数为非质数 } } } // 收集所有质数 vector<int> primes; for (int i = 2; i <= MAX; i++) { if (isPrime[i]) { primes.push_back(i); } } // 输出第n小的质数(注意n从1开始,数组从0开始) cout << primes[n - 1] << endl; return 0; }