1000以内的质数之和用C语言写出来谢谢啊

来源:百度知道 编辑:UC知道 时间:2024/05/09 16:22:55
1000以内的质数之和用C语言写出来谢谢啊

给个专用来求大质数的思路——筛法。

#include "stdio.h"
#define N 1000
#define getisp(i) (a[(i)/8]>>((i)%8))&0x1
//用来取得第i个数是否质数标记,宏操起来比函数更快更省内存
#define setisp(i,j) j?(a[(i)/8]|=(0x1<<((i)%8))):(a[(i)/8]&=~(0x1<<((i)%8)))
//用来设置第i个数是否质数标记,宏操起来比函数更快更省内存

void main()
{
char a[N/8+1];
long i=1,j,n;
double sum=0.0;
FILE *pf;
a[0]=0x56;//第一个字节有2这个质数和1这个合数所以单独设置。(0x56)16=(01010110)2
while(i<N/8+1)
{
a[i]=0x55;
i++;
}
i=3;//从3开始
while(i*i<N)
{
j=i*i;
while(j<N)
{
if(getisp(j-1)) setisp(j-1,0);
j+=i;
}
do{i+=2;}while(!getisp(i-1));
}
i=1;
while(i<N)
{
if(getisp(i-1)) sum+=i;
i++;
}
printf("The sum of all prime in 1000 is: %0.0f",sum);
}

#include <stdio.h>
#include <math.h>

int isPrimer(in