0
点赞
收藏
分享

微信扫一扫

判定素数

1.原始题目

求100-200之间的素数。

素数:大于1且只能被1和其本身整除的数,如2、3、5、7、11、13......


2.原始方法

对100-200中的每个数都进行素数判断,而每个数n则从2-n-1进行遍历检查能否整除。

即下面代码:

#include<stdio.h>

int judge(int num)	//判断一个数是否为素数
{
	for (int i = 2; i < num; i++)
	{
		if (num % i == 0)
			return 0;
	}
	return 1;
}

int main()
{
	for (int i = 100; i <= 200; i++)
	{
		if (judge(i))
			printf("%d ", i);
	}
	return 0;
}


3.进一步思考

1)仅对于一个数n而言,最理想的情况是√n *√n = n的情况,那么就会发现,如果存在一个数x在2-√n的范围内,并且n能被这个数x整除,那么必定存在另一个数y属于√n-n-1的范围也能够使得n被y整除——即我们只要判断n能否被2-√n之间的一个属整除就行,存在这样的数,n就不是素数,这就能在原来的思路上减少一半的计算量。

2)对于100-200的范围内,偶数必定不是素数,只需要判定奇数即可,这又能减少原来的一半。

于是有了下面代码:

#include<stdio.h>
#include<math.h>

int judge(int num)	//判断一个数是否为素数
{
	for (int i = 2; i <= sqrt(num); i++)
	{
		if (num % i == 0)
			return 0;
	}
	return 1;
}

int main()
{
	for (int i = 101; i < 200; i+=2)
	{
		if (judge(i))
			printf("%d ", i);
	}
	return 0;
}

举报

相关推荐

0 条评论