编程统计3到100的素数个数 (c语言求1-100素数的个数)

素数也叫质数,检验一个数是否为素数的最快方法:就是用不大于这个数的平方根的所有素数试除,如果有一个能整除,它就是合数;如果都不能整除,它就是素数,程序如下:

//找区间[m,n]上的素数并统计个数

#include <stdio.h> /*包含输入输出函数*/

#include <math.h> /*包含数学函数*/

main () /*主函数*/

{ //先找小于2^31的平方根的素数并存入数组z[]中:

int z[4793]={2}; //2是第一个素数。因46349以内共有素数4793个,且46349已经大于2^31的平方根

int i,x,g=0,q; //循环变量i,数组下标x,素数个数g,整数i的算术平方根q

for(i=3;i<=46349;i+=2) //因大于2的偶数一定不是素数

{ x=0; q=sqrt(i); //每次都从z[0]开始检验

while (i%z[x] !=0) //如i不能被z[x]整除,用下一个素数检验

{ if(z[x]<=q) x++; //i不是素数时:用数组中的下一个素数检验

else //如z[x]>q),则i是素数,此时:

{ g++;z[g]=i; //素数个数g加1,保存该素数,

break; //退出内循环(检验下一个整数)

}

}

}

//再找闭区间[m,n]上的素数:

int m,n; //整数范围[m,n] (其中m,n为自然数,且m<=n<2^31)

printf("请输入整数范围[m,n], (m n之间用空格隔开隔开):"); scanf("%d %d",&m,&n);

g=0;//素数总个数g置0

if(m<=2) { printf("2 "); m=3; g++; }

if(m%2==0) m++; //使m从奇数开始

for(i=m;i<=n;i+=2) //因大于2的偶数一定不是素数

{ x=0;q=sqrt(i); //每次都从第一个素数z[0]开始检验

while (i%z[x] !=0) //如i不能被z[x]整除,用下一个素数检验

{ if(z[x]<=q) x++; //i不是素数时:用数组中的下一个素数检验

else //如z[x]>q,则i是素数,此时:

{ g++; //素数个数g加1

printf("%d ",i); //输出该素数

break; //退出内循环(检验下一个整数)

}

}

}

printf("\n所找闭区间上共有素数:%d个",g);

return 0;

}