首先,什么是素数?
素数是在大于1的自然数中,除了1和它本身以外,不能被其它自然数整除的数。
1.用C语言判断素数,最基本的思想是:一个自然数i,用 i 除以 2 ~ i-1 之间的所有数,如果不能被整除,则 i 为素数 ,打印在屏幕中。
int main()
{
int i = 0;
int count = 0;//素数的个数
for (i = 100;i <= 200;i++)//得到100-200之间的数
{
//判断i是否是素数
//用2~i-1之间的数去试除i ,能整除就不是素数,不能整除就为素数
int j = 0;
int flag = 1; //flag是1,表示是素数
for (j = 2;j <= i - 1;j++)
{
if (i % j == 0)
{
flag = 0;
break;//能整除,即跳出循环
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n");
printf("count=%d",count);//打印出100~200之间素数的个数
}
2. 在第一种方法的基础上,对代码进行优化。
首先,一个数 i 如果不是素数,那么它可以写成 两个数相乘的形式 ,即 i = a*b .
如:16 = 1*16
16 = 2 * 8
16 = 4 * 4
那么,a和b 其中的一个数,一定小等于 i 的开平方数。上述例子中:2 < 4
因此,一个数 i 可以被另一个数整除,另一个数一定小等于 i 的开平方数。
并且偶数一定不是素数,可以在源头上减少要测试的数。
int main()
{
int i = 0;
int count = 0;//素数的个数
for (i = 101;i <= 200;i+=2)//得到100-200之间的奇数
{
//判断i是否是素数
//用2~sqrt(i)之间的数去试除i ,能整除就不是素数,不能整除就为素数
int j = 0;
int flag = 1; //flag是1,表示是素数
for (j = 2;j <= sqrt(i);j++) // sqrt()函数是开平方函数
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n");
printf("count=%d",count);//打印出100~200之间素数的个数
}