for循环判断素数
1.判断100~200间的素数,输出统计个数
<素数>也说质数,数学上指在大于1的整数中只能被1和它本身整除的数。
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否是素数
//使用2~i-1之间的数字去试除i
//如果i被整除了,i不是素数
//如果2~i-1之间没有数字可以整除i,i为素数
int flag = 1;//假设是素数
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)//是素数
{
count++;
printf("%d ",i);
}
}
printf("\n共有%d个素数", count);
return 0;
}
输出结果
2.代码优化
利用偶数都能够被2整除,将i初始值设为奇数,每循环+2,在循环判断素数中直接跳过不是素数的偶数。
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)//跳过能被2整除的偶数
{
int flag = 1;//假设是素数
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)//是素数
{
count++;
printf("%d ",i);
}
}
printf("\n共有%d个素数", count);
return 0;
}
3. 代码优化2
根据判断素数的定义,在循环利用 i % j 时,将 j 的大小控制在2~√j
在跳过偶数的基础上,再次减少判断时间。
#include<stdio.h>
#include<math.h>//包含数学的库函数
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i += 2)//跳过能被2整除的偶数
{
int flag = 1;//假设是素数
int j = 0;
//sqrt为开平方计算的库函数,使用时加头文件#include<manth.h>
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)//是素数
{
count++;
printf("%d ", i);
}
}
printf("\n共有%d个素数", count);
return 0;
}