C语言如何判断一个数是素数,输出100-200之间的全部素数。

  素数又称质数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数

#include<stdio.h>

int Sushu(int a);
int main()
{
	int n = 0, res = 0;

	for (n = 100; n < 200; n++)
	{

		res = Sushu(n);
		if (res == 1)
			printf("%4d", n);
	}


	system("pause");
	return 0;
}

int Sushu(int a)
{
	int i = 0;

	for (i = 2; i < a; i++)
	{
		if (a % i == 0)
		return 0;       //如果不是素数返回0
	}
	return 1;              //如果是素数返回1
}
  此时,素数判断函数里的循环条件i是从2到a,即这个数本身,显然这是没有必要的。因为要判断这个数是不是素数根本不用这么大范围的循环条件,可以一步步的缩小循环条件的范围,使程序更高效。

  我们知道如果一个数a不是素数,那么它一定可以看成是a/2之前的某个数的倍数,那么循环条件i的范围可以缩小为2到a/2。

for (i = 2; i < a / 2; i++)
	{
		if (a % i == 0)
		return 0;      
	}
  此时的程序效率要比之前的快一倍。然而我们还可以进一步提高它的效率。

因为如果一个数不是素数是合数, 那么一定可以由两个自然数相乘得到, 其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。那么这时循环条件i的范围可以缩小为2到sqrt(a),值得注意的是这里一定要包括sqrt(a),要不然计算结果会有遗漏。

for (i = 2; i <=sqrt(a); i++)
	{
		if (a % i == 0)
		return 0;       
	}
在这里调用了库函数sqrt()来计算a的开方值,所以头文件要包含这个函数的库#include<math.h>。

  

  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值