给个专用来求大质数的思路——筛法。
#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
a[i]=0x55;
i++;
}
i=3;//从3开始
while(i*i
j=i*i;
while(j
if(getisp(j-1)) setisp(j-1,0);
j+=i;
}
do{i+=2;}while(!getisp(i-1));
}
i=1;
while(i
if(getisp(i-1)) sum+=i;
i++;
}
printf("The sum of all prime in 1000 is: %0.0f",sum);
}
#include
#include
int isPrimer(int n)
{
int i;
if(n == 1)
return 0;
if(n == 2)
return 1;
if(n%2 == 0)
return 0;
else
{
int count =(int)sqrt(n)+1;
for(i=3;i
return 0;
}
return 1;
}
int main(void)
{
int n;
int i;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
if(isPrimer(i))
{
printf("%d,",i);
}
}
return 0;
}
我试过了没问题的
main()
{
int i,k,c;
c=1;
for (i=2;i<=1000;i++) /*设定范围1000以内*/
{
for(k=2;k<=i;k++) /*从1查到当前所判断的数*/
{
if (i%k==0 && k!=1 && i!=k) c=0; /*如果已经不满足素数条件,则将标志转0*/
}
if (c!=0)
printf("%d,",i);
c=1; /*初始化标志*/
}
}