#include <stdio.h>
#include <stdbool.h>
void sieveOfEratosthenes(int n, int k) {
bool isPrime[n + 1];
int primes[k];
int count = 0;
//
初
始
化
素
数
标
记
数
组
for (int i = 2; i <= n; i++) {
isPrime[i] = true;
}
//
素
数
筛
选
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
//
将
p
的
所
有
倍
数
标
记
为
⾮
素
数
for (int i = p * 2; i <= n; i += p) {
isPrime[i] = false;
}
}
}
//
找
出
最
⼤
的
k
个
素
数
for (int p = n; p >= 2 && count < k; p--) {
if (isPrime[p]) {
primes[count++] = p;
}
}
//
打
印
最
⼤
的
k
个
素
数
for (int i = 0; i < k; i++) {
printf("%d ", primes[i]);
}
}
int main() {
int n = 100; //
求
100
以
内
的
素
数
int k = 5; //
求
最
⼤
的
5
个
素
数
sieveOfEratosthenes(n, k);
return 0;
}