最近遇到一道,是关于筛质数的,问题如下:
给定一个正整数 n,请你求出 1∼n 中质数的个数。
Input
共一行,包含整数 n。
2 ≤ n ≤ 108
Output
共一行,包含两个整数,第一个表示 1∼n 中质数的个数,第二个表示其中最大的素数。
Sample Input
8
Sample Output
4 7
Hint
[1, 10000000] ,一千万内,有 664579 个素数
[1, 1000000] ,一百万内,有 78498 个素数
[1, 100000] ,十万内, 有 9592 个素数
[1, 10000] ,一万内, 有 1229 个素数
一亿之内, 有 5761455 个素数
十亿之内, 有 50847534 个素数
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int sum;
int o[100000010];
bool st[100000010];
int i,j;
void shai (int a)
{
for(i=2;i<=a;i++)
{
if(!st[i])
{
o[sum++]=i;
}
for(j=0;o[j]<=a/i;j++)
{
st[o[j]*i]=true;
if(i%o[j]==0)
{break;}
}
}
}
int main(int argc, char *argv[]) {
int a;
scanf("%d",&a);
shai(a);
printf("%d %d\n",sum,o[sum-1]);
return 0;
}
runtime error,是计算超时了,你要减少循环次数
参考
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!