c语言输入 n(10≤ n ≤10000) 和 k(1≤ k ≤10),求 n 以内最大的 k 个素数,按降序排列并将和输出在最后。
时间: 2024-02-05 09:02:37 浏览: 84
输出n以内的所有素数 c语言:找出N以内的所有素数
```
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int n) { // 判断素数
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int n, k;
scanf("%d%d", &n, &k);
int primes[k]; // 存放最大的 k 个素数
int sum = 0; // 记录素数和
for (int i = 2; i <= n; i++) {
if (isPrime(i)) { // 如果是素数
if (k > 0) { // 如果还没找齐 k 个素数
primes[k - 1] = i;
k--;
} else { // 如果已经找齐了 k 个素数
for (int j = 0; j < k; j++) {
if (i > primes[j]) { // 如果当前素数比前面的某个素数大
int temp = primes[j];
primes[j] = i;
i = temp; // 交换两个素数的值
}
}
}
sum += i; // 素数和增加
}
}
for (int i = 0; i < k; i++) { // 输出最大的 k 个素数
printf("%d ", primes[i]);
}
printf("%d\n", sum); // 输出素数和
return 0;
}
```
阅读全文