输入一个正整数,求第n小的质数c语言代码
时间: 2023-11-01 11:05:56 浏览: 144
以下是用C语言编写的求第N小质数的代码:
```
#include <stdio.h>
int main()
{
int n, count = 0, i, j;
scanf("%d", &n);
for (i = 2; ; ++i)
{
for (j = 2; j <= i; ++j)
if (i % j == 0)
break;
if (j == i)
{
++count;
if (count == n)
{
printf("%d", i);
return 0;
}
}
}
return 0;
}
```
如果您还有其它问题,请随时问我。
相关问题
输入一个正整数 n ,求第 n 小的质数。 输入格式 一个不超过 10000 的正整数 n 。 输出格式 第 n 小的质数。用C语言编写代码并解释每一步
```c
#include <stdio.h>
#define MAX_N 10000
int is_prime[MAX_N + 5] = {0};int prime[MAX_N + 5] = {0};
void init() {
for (int i = 2; i <= MAX_N; i++) {
if (!is_prime[i]) prime[++prime[0]] = i;
for (int j = 1; j <= prime[0] && i * prime[j] <= MAX_N; j++) {
is_prime[i * prime[j]] = 1;
if (i % prime[j] == 0) break;
}
}
}
int main() {
init();
int n;
scanf("%d", &n);
printf("%d\n", prime[n]);
return 0;
}
```
解释:
1. 定义了一个 MAX_N 宏,表示最大的质数范围。
2. 定义了两个数组,is_prime 数组用于标记是否为质数,prime 数组用于存储质数。
3. init 函数用于筛选出 MAX_N 范围内的所有质数,并存储在 prime 数组中。
4. 在主函数中,首先调用 init 函数,然后输入一个正整数 n,输出第 n 小的质数,即 prime[n]。
5. 代码中使用了埃氏筛法,具体实现见代码注释。
输入一个正整数n,求第n小的质数。使用C语言
在C语言中,寻找第n小的质数通常涉及到一个名为“Sieve of Eratosthenes”的算法,用于生成一定范围内所有的质数。这是一个经典的效率较高的算法。以下是一个基本的示例代码,它会找出小于`n`的所有质数,然后返回第n个:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0) {
return false;
}
}
return true;
}
int nth_prime(int n) {
int count = 0, current_num = 2;
while (count < n) {
if (is_prime(current_num)) {
++count;
if (count == n) {
return current_num;
}
}
++current_num;
}
return -1; // 如果n超出范围,返回-1(因为没有比n大的质数)
}
int main() {
int n;
printf("请输入一个正整数n: ");
scanf("%d", &n);
if (n > 0) {
int nth_prime_number = nth_prime(n);
if (nth_prime_number != -1) {
printf("第%d小的质数是: %d\n", n, nth_prime_number);
} else {
printf("错误: 没有第%d个质数。\n", n);
}
} else {
printf("错误: 请输入一个正整数。\n");
}
return 0;
}
```
这段代码首先检查输入是否为正整数,然后通过`is_prime`函数判断每个数字是否为质数,当找到第n个小的质数时,就立即返回结果。如果n超过了所有可用的质数,则返回-1表示找不到第n个质数。
阅读全文