C语言程序,给定一个正整数 i,输出第 i 小的质数。
时间: 2024-10-14 08:13:58 浏览: 71
在C语言中,为了找到第i小的质数,你可以使用一种名为“筛法”的算法,比如埃拉托斯特尼筛(Sieve of Eratosthenes)。这里有一个简单的步骤说明:
1. 创建一个大小为`n + 1`的布尔数组`is_prime[]`,其中`is_prime[i] = true`表示`i`是质数,初始化所有元素为true。
2. 遍历从2到√n(因为大于这个数的因子肯定小于它),如果当前数字`is_prime[j]`为true,则将其所有的倍数都标记为非质数(即`is_prime[j * k] = false`,其中`k >= 2`)。
3. 遍历整个`is_prime[]`数组,遇到第一个值仍为true的索引`i`,则找到了一个质数。此时将计数器`count`加一,并检查`count`是否等于`i`,如果是,则输出`i`并退出循环。
4. 如果遍历完都没有找到第i个小的质数,说明输入的i超出了已知质数的数量范围。
以下是C语言代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
void sieve_of_eratosthenes(int n, int* primes) {
bool is_prime[n + 1];
for (int i = 0; i <= n; i++) {
is_prime[i] = true;
}
for (int p = 2; p * p <= n; p++) {
if (is_prime[p]) {
for (int i = p * p; i <= n; i += p)
is_prime[i] = false;
}
}
int count = 0, current_prime = 2;
for (int i = 2; i <= n && count < i; i++) {
if (is_prime[i])
primes[count++] = i;
}
}
int main() {
int i;
printf("请输入一个正整数 i:");
scanf("%d", &i);
int primes[1000]; // 确保足够大存储前i个质数
sieve_of_eratosthenes(i, primes);
if (count < i) {
printf("无法找到第 %d 小的质数,因为它超出了已知质数列表。\n", i);
} else {
printf("第 %d 小的质数是:%d\n", i, primes[i - 1]);
}
return 0;
}
```
阅读全文