以下是C语言实现求n以内最大的k个素数的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>bool is_prime(int num) { // 判断素数int i;if(num < 2) {return false;}for(i = 2; i <= sqrt(num); i++) {if(num % i == 0) {return false;}}return true;
}void find_k_primes(int n, int k) { // 查找最大的k个素数int i, count = 0, max_prime = 0;for(i = 2; i <= n; i++) {if(is_prime(i)) { // 如果是素数,则更新最大素数和素数个数if(i > max_prime) {max_prime = i;}count++;if(count == k) {break; // 已经找到k个素数,直接跳出循环}}}if(count < k) { // 如果没有找到k个素数,则输出所有素数printf("There are only %d prime numbers less than or equal to %d: \n", count, n);for(i = 2; i <= n; i++) {if(is_prime(i)) {printf("%d ", i);}}} else { // 找到了k个素数,则输出最大的k个素数printf("The largest %d prime numbers less than or equal to %d are: \n", k, n);for(i = max_prime; i >= max_prime - k + 1; i--) {while(!is_prime(i)) { // 如果当前数不是素数,则向前搜索i--;}printf("%d ", i);}}
}int main() {int n, k;printf("Please enter n and k: \n");scanf("%d%d", &n, &k);find_k_primes(n, k);return 0;
}
在该代码中,我们先定义了一个判断素数的函数 is_prime
,然后在 find_k_primes
函数中查找最大的k个素数。在查找的过程中,我们使用了一个计数器 count
,记录已经找到的素数个数,以及一个变量 max_prime
,记录已经找到的最大素数。当找到k个素数时,我们直接跳出循环;当没有找到k个素数时,我们输出所有的素数。
最后在 main
函数中,我们从输入获取n和k,并调用find_k_primes函数来查找最大的k个素数。