循环的嵌套-素数的判断
9. 循环的嵌套
前⾯学习了三种循环 while , do while , for ,这三种循环往往会嵌套在⼀起才能更好的解决问题,就是我们所说的:循环嵌套,这里我们就看⼀个例⼦。
9.1 素数练习:
找出 100~200 之间的素数,并打印在屏幕上。 注:素数又称质数,只能被 1 和本⾝整除的数字。
题目解析:
-
要从 100~200 之间的素数,首先得有 100 到 200 之间的数,这⾥可以使用循环解决。
-
假设要判断 i 是否为素数,需要拿 2~i-1 之间的数字去试除 i,需要产生 2 到 i-1 之间的数字也可以使用循环解决。
-
如果 2~i-1 之间有数字能整除 i,则 i 不是素数,如果都不能整除,则 i 是素数。
参考代码1:
#include <stdio.h>
int main()
{
int i = 0;
//循环产生100~200的数字
for(i=100; i<=200; i++)
{
//判断 i 是否为素数
//循环产生2~i-1之间的数字
int j = 0;
int flag = 1;//假设 i 是素数
for(j=2; j<i; j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag == 1)
printf("%d ", i);
}
return 0;
}
参考代码2:
记录打印 100~200 之间的素数,并统计个数。
#include <stdio.h>
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i+=2)
{
//判断i是否是素数
//使用2~i-1之间的数字去试除i
//如果i被整除了,i就不是素数
//如果2~i-1之间的没有数字可以整除i,就是素数
int j = 0;
int flag = 1;//假设i是素数
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
参考代码3:
其实可以让代码更加优化,遍历范围只需要:[2 ~ sqrt(i)],就可以判断该数是否是素数。
#include<stido.h>
#include <math.h>
//sqrt 是库函数,是用计算开平方法的, 他的使用需要包含头文件math.h
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i += 2)
{
//判断i是否是素数
//使用2~sqrt(i)之间的数字去试除i
//如果i被整除了,i就不是素数
//如果2~sqrt(i)之间的没有数字可以整除i,i就是素数
int flag = 1;//假设i是素数
for (int j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}