例如第一个是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计数,x从1开始
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++;
}
}
看看你的代码