大家对于素数应该是不陌生的吧,即只能被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 查看本文章