c语言求第x个素数的代码

例如第一个是2,第二个是3,我自己用了循环的嵌套就是输出不了正常值

素数筛法
参见:https://blog.csdn.net/zeekliu/article/details/124091682
以下为代码(C++),稍微改改即可用
这里查询范围为1到10的8次方,q表示询问次数
还可以参考:https://www.luogu.com.cn/problem/P3383
请采纳,谢谢

#include <bits/stdc++.h>
using namespace std;

bool isPrime[100000010];//1素0合
int Prime[6000010], cnt = 0;//prime存素数

void GetPrime(int n)//筛到n
{
    memset(isPrime, 1, sizeof(isPrime));//0变1
    isPrime[1] = 0;
    for (int i=2;i<=n;i++)
    {
        if (isPrime[i]) 
            Prime[++cnt] = i; //i成为下一个素数
        for (int j=1;j<=cnt && i*Prime[j]<= n;j++) 
        {
            //素数倍数筛掉(素数除外)
            isPrime[i*Prime[j]]=0;
            if (i%Prime[j]==0)
                break;
        }
    }
}

int main()
{
    int n=1e8, q;
    cin>>q;
    GetPrime(n);
    while (q--)
    {
        int k;
        cin>>k;
        cout<<Prime[k]<<endl;
    }
    return 0;
}


#include <stdio.h>
int main()
{
    int n,x=2,i=0;         //n为素数的个数,i计数,x1开始 
    scanf("%d",&n);
    while(i<n)
    {
        int isprime =1,a=2;
        for(a;a<x;a++)
        {
            if(x%a==0)
            {
                isprime=0;
                break; 
            } 
        }
        if(isprime==1)
        {
            printf("%3d ",x);  //printf"%d\t",x);为了使输出对齐
            i++;
            if(i%5==0)
            {
                printf("\n");
            }
        }
        x++;
    }
}

看看你的代码