计算并输出1至n(n很大)之间所有素数之和 ,求高手解答!
能对任意一个5<n<1,000,000,000的整数进行处理,并且时间限制在15秒内,内存利用限制为32M我仿照网上的线性刷法写的,但是对于1,000,000,000就出错了,求高手解决
#include <stdio.h>
#define MAX_N 1000000001
char prime[MAX_N] ={0};
long long sum = 5;
void testprime(int n)
{
int i, j;
short gab =4;
for(i = 5 ; i < n; i +=gab)
{
gab = 6 - gab;
if(prime[i]) continue;
sum = sum + i;
for(j = i << 1; j < n; j += i) prime[j] = 1;
}
}
int main()
{
int n;
scanf("%d", &n);
testprime(n);
printf("%lld\n", sum);
return 0;
}