runtime error?怎么解决?

最近遇到一道,是关于筛质数的,问题如下:

给定一个正整数 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;
}

运行了好多次,都不通过

img

我数组开到10e9,还是显示runtime error,新手小白实在想不出问题在哪
请各位大lao帮忙看看问题在哪

runtime error,是计算超时了,你要减少循环次数
参考

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img