C语言实现打印素数

写一个代码:打印100~200之间的素数

首先什么是素数,素数,又称质数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。 比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着很重要的地位。

那么我们只需要两个循环就可以实现打印100-200之间的素数。第一关for循环生成100-200之间的数被除数a,第二个for循环生成2-a之间的除数 i,那么只需要判断a%b的值就可以判断这个数是不是素数了。

#define _CRT_SECURE_NO_WARNINGS
#include 

int main()
{
	int a, i;
	for (a = 100; a <= 200; a++)
	{
		for (i = 2; i < a; i++)
		{
			if (a % i == 0)
				break;
			//如果余数是零那么就代表可以整除,
			//也就没有继续除下去的必要了,所以直接break
		}
		if (i == a)
        //如果除数等于被除数那么就代表前面都没有数能够整除
        //即代表这个数是素数
			printf("%d ", a);
	}
	return 0;
}

同样的道理,如果这样写代码在判断一个数的时候会进行很多次的无效运算。那么有没有什么办法优化一下?那么我们可以想一下,如果一个数a,不能被2整除的话,那么当判断到a/2以后的数是不是都没有意义了呢?比如说当判断到a/2+1的时候,就没有必要进行判断,因为1

那么这时候就是优化完了吗,其实不然。如果i在大于a的平方根后还不能被a整除,那么就可以判断a是素数。举个栗子,a=9,sqrt(a)=3,那么这时候就可以判定a不是素数,而不用去算到a/2=4,少了一次循环。由此看来循环条件还是可以再次优化即i

你可能感兴趣的:(算法)