首先可以了解什么是素数,并如何判断呢?
1,素数就是质素,只能被1和它本身整除的数字。
2,如果要判断i是否为素数,那2~i-1的数字去试除。
3,如果i被整除,就说明i不是素数。
4,如果2~i-1之间的数字都不能整除i,说明i是素数。
下面介绍一种试除法来判断一个数是否为素数,并打印。
题目:输出100~200之间的素数
#include<stdio.h>
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int flag = 1;//假设i为素数
int j = 0;
//判断i是否为素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;//被整除,说明i不是素数
break;
}
}
if (1==flag)//如果可执行,说明i是素数
{
printf("%d ", i);
}
}
return 0;
}
还可以对代码进行优化,提高程序运行效率,将第10行代码的for语句中的 i 改写成sqrt(i)
效果如下图所示。
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;//被整除,说明i不是素数
break;
}
}
for (j = 2; j <=sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;//被整除,说明i不是素数
break;
}
}
为什么呢?如果m=a*b,则a和b中至少有一个数是小于等于根号m的,例如16=2*8,16=4*4。
所以得出一个结论:如果(2~√m)之间有一个因子能整除m,一定会有另外一个因子能整除m
如果√m之前没有因子能整除m,之后没有能整除m的因子了,则(2~√m)之间没有能整除m的因子,
即为m为素数。
其实我们还知道偶数不是素数,所以可以将第5行代码进行优化,判断奇数是否为质数即可。源头形式上少了一半数据,效率又能提高。
for (i = 101; i <= 200; i+=2)
最后优化后的代码如下图所示(别忘了引用头文件#include<math.h>)
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
for (i = 101; i <= 200; i+=2)
{
int flag = 1;//假设i为素数
int j = 0;
//判断i是否为素数
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;//被整除,说明i不是素数
break;
}
}
if (1 == flag)//如果可执行,说明i是素数
{
printf("%d ", i);
}
}
return 0;
}
以上简单介绍了什么是素数,并且如何用代码判断和打印素数,最后如何优化代码来提高运行效率。
希望对读者有所帮助,也可以指出不足之处,共同进步。