判断一个数是否为素数

首先可以了解什么是素数,并如何判断呢?

1,素数就是质素,只能被1和它本身整除的数字。

2,如果要判断i是否为素数,那2~i-1的数字去试除。

3,如果i被整除,就说明i不是素数。

4,如果2~i-1之间的数字都不能整除i,说明i是素数。


下面介绍一种试除法来判断一个数是否为素数,并打印。

题目:输出100~200之间的素数

#include
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)

#include
#include
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;
}

       以上简单介绍了什么是素数,并且如何用代码判断和打印素数,最后如何优化代码来提高运行效率。

       希望对读者有所帮助,也可以指出不足之处,共同进步。

你可能感兴趣的:(c语言)