素数的多种解法

大家对于素数应该是不陌生的吧,即只能被1和本身所除尽的数叫做素数

素数的解法也很多,下面我们就慢慢谈起,可以说素数代码总体上来说是不难理解的,但是有几个小知识点需要大家在编代码的时候多关注一下,先放上一个简单的代码

#include<stdio.h>
int main()
{
	int i,j;
	int count=0;
	for(i=100;i<=200;i++)
	{
		for(j=2;j<i;j++)
		{
			if(i%j==0)
			{
				break;
			}
		}
		if(i==j)
		{
			count++;
			printf("%d  ",i);
	     }
	}
	printf("\n");
	printf("count=%d\n",count);
	return 0;
}

   上面这个代码的思想就简单明了,就是输出100-200之间的素数,那么该怎么去做呢,建立一个数组吗,可以是可以的,但是当所需要判断的区间变大,数组就显得很是麻烦了,所以,在这里选择循环判断(小重点),当i%j==0时,该数一定不是素数,那么是不是不等于的时候就是素数了呢?我们接着去想,当i%j!=0时,i就是素数了吗,那么9是素数吗???要知道9%2就是不等于0的呢,这样看来,并不能这样去判断不是素数,(划重点)要确保2-i-1内的所有数全不能被整除才可以,所以,在外面的循环里面去判断,能循环到这一步的只有两种可能(思想理解),i==j,是素数,或者i<j,不是素数。所以在外循环中进行一步i,j判断就可判断出是否是素数。

  在代码中加的count是为了计算素数的数量。

一个简单的输出100-200之间的素数的代码就完成了,那么来想一下如何来优化它吧

优化方案1:把条件判断 j<i 改为 j<sqrt(i) 

原因:sqrt(i)意思是i开根号,一个数如果可以被整除,那么这个数的两个因子,一个必定小于sqrt(i),一个必定大于sqrt(i),因为sqrt(i)的平方刚好等于 i 。所以,只需要判断在这个区间内是否可以被整除,就可以确定另一个区间.

优化方案2:外层循环进行i+2,省去偶数

我的分享就到此结束啦,如果有小可爱对素数有执着的追求,建议去看一下《素数的N种解法》,如果不理解,欢迎骚扰o

扫描二维码关注公众号,回复: 3928465 查看本文章

猜你喜欢

转载自blog.csdn.net/sophie1314/article/details/81289705