找出100-200之间的素数,并打印到屏幕上
注:素数又称为质数,只能被1和本身整除的数字
题目解析:
1.要从100-200之间找出素数,首先得有100-200之间的数字,可以使用循环解决
2.假设要判断一个数是否为素数,需要拿出2~i-1之间的数字去试除,就会产生2~i-1之间的数字,也可以使用循环解决
3.如果2~i-1之间的数字能整除,就说明不是素数,否则,说明是素数
代码实现:
#include<stdio.h>
int main()
{
int i = 0;
//循环产生100-200之间的数字
int count = 0; //用来计算素数的个数
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
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\n%d ", count);
return 0;
}
上面这个方法,如果数字比较大的话,就需要判断很长时间,效率不是特别高,可以试着改进一下
改进1:
思路:我们可以将i的初始值设置为101,后面的调整条件换成 i=i+2,使得其每次都是产生奇数,这样查找效率就会提高一半。
修改代码:
for (i = 101; i <= 200; i+=2)
完整代码:
#include<stdio.h>
int main()
{
int i = 0;
//循环产生100-200之间的数字
int count = 0; //用来计算素数的个数
for (i = 101; i <= 200; i+=2)
{
//判断i是否为素数
//循环长生2到i-1之间的数字
int j = 0;
int flag = 1; //假设i是素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
//如果能整除就说明不是素数,将flag值置为0
flag = 0;
break;
}
}
if (flag == 1)
{
count++;
printf("%d ", i);
}
}
printf("\n%d ", count);
return 0;
}
我们发现上述的方法还是不够高效,可以尝试再改进一下。
改进2:
思路:我们发现随便一个数字中至少一个因子一定小于等于一个数开平方后的数,例如: 16开平方的话就等于 4,他可以由 2 * 8得到,也可以 4 * 4得到,所以我们只需要看能不能被开平方后的数字整除,就可以知道是否为素数,这样就更加高效的提高了判断的效率。
修改代码:
for (j = 2; j <=sqrt(i); j++)
完整代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
int flag = 1;
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;
}
需要注意的是:这里用到了sqrt()这个数学函数,所以需要引用头文件<math.h>。