根据常识,偶数不是素数,所以不必对偶数阱行判定,循环变量从101开始,每次增加2.
- n不必被2-(n-1)的个整数去除,只需要被2-n/2的整数除即可,甚至只需被2-n2的整数除即可。因为n的每一个因子,必然有一个大于n2,另一个小于n^2
- 例如,判断17是否为素数,只需将17被2.3.4除即可,如都除不尽,17为素数。这样做可以提高执行效率
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k,m=0;
for(n=101;n<=200;n=n+2)//偶数不是素数,只检查奇数,从101开始循环
{
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0) break;//如果n能被i整除,终止内循环,此时i<k+1
if(i>=k+1)//如果i>=k+1,表示n未曾被i整除
{
printf("%d\t",n);//确定n是素数
m++;//m用来控制换行,一行内输出10个素数
}
if(m%10==0)
printf("\n");
}
return 0 ;
}