用c语言输出第i个质数
时间: 2024-10-15 12:24:17 浏览: 34
在C语言中,输出第i个质数需要一些算法知识,因为直接循环检查每个数字是否为质数效率较低。通常我们会采用一种称为“Sieve of Eratosthenes”的筛法,它可以高效地找出一定范围内的所有质数。以下是找到第i个质数的一个示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
// 函数用于标记合数
void mark_composite(int* array, int n) {
for (int i = 4; i * i <= n; i += 2) {
if (array[i] == 0)
continue;
for (int j = i * i; j <= n; j += i)
array[j] = 0;
}
}
// 主函数
int find_nth_prime(int n) {
bool isPrime[100000];
memset(isPrime, true, sizeof(isPrime));
isPrime[0] = isPrime[1] = false;
int count = 0, num = 2;
while (count < n) {
// 如果当前数未被标记为合数,它是质数
if (isPrime[num]) {
printf("%d ", num);
++count;
}
// 继续寻找下一个质数
mark_composite(isPrime + num, 100000 - num); // 筛选出大于num的所有合数
++num;
}
return num - 1; // 返回第n个质数,注意数组索引从0开始计数
}
int main() {
int i, nth_prime;
printf("请输入你要找的第几个质数:");
scanf("%d", &i);
nth_prime = find_nth_prime(i);
printf("第%d个质数是:%d\n", i, nth_prime);
return 0;
}
```
在这个程序中,用户输入想要查找的第i个质数,然后`find_nth_prime`函数会计算并输出它。注意这个例子假设你需要找的是不超过10万以内的质数。
阅读全文