解析:
所谓素数就是除了1和它本身之外,没有其它因数的自然数;所以根据这个特性,我们在编写这个代码的时候是否有点思路?写两层循环,第一层是100-200的数(暂定i),第二层是1-j-1的数(暂定j);当i%j ==0说明还有其它因数,就不是素数;else全部循环走完一遍都没有,就是素数。
方法1:
1.1注意事项:
我们平时有没有注意?素数好像都是奇数啊!!!根本没有偶数,因为偶数必然能被2整除啊=======》肯定有因数2;所以我们写循环时只要奇数就可以啦,这样可以减少循环次数!!!
1.2下面看具体代码:
1.3代码分析:
1.第一次层循环有没有发现我是从第101数开始的,每次+2就可以完美的避过偶数,只让素数循环;
2.第二层循环,我们取的数是2-----i-1;
3.如果(i%j==0)说明数i有除了1和它本身外的其它因数,既然已经确定它有其它因数了,就没必要继续寻找还有没有其它更多的因数,直接跳出循环;跳出循环后会判断一下此时的数是不是i==j;这是打印的判断条件;如果等于就打印,不等于就不打印;
4.当我们内循环走完,发现都没有数使得(i%j==0);我们同样会去走到判断此时的数是不是i==j;如果等于就打印,不等于就不打印;
1.4总结:
我们还定义了一个计数器count,没打印一个素数就让count++;并且选取的数据是100-200范围比较少的数;为了就是便于后期我们的验证!!!
代码优化:
2.1注意事项:
这个代码是不是还可以继续优化?当然是可以的;我们平常有没再次注意到一个数(暂定为n)的因数必然是<=的?
比如:225===》=15那么以15以分界面,你会发现225所有的因数之中,每一对因数必然有一个是<=15的?=====》例如:45*5=225;一个因数是45,我们不管,但是另外一个因数是5确实是<=15的;是不是很神奇?有了这个想法,我们就可以继续优化我们的代码了!!!
2.2下面看具体代码:
2.3代码分析:
1.想要得到这个数,我们就需要调用库函数sqrt(n)========》头文件是<math.h>
2.嗯?是不是发现我们又定义一个标记变量flag?有什么用呢?
答:当然是为了作为打印结果的条件啊,在第一种方法中我们用的打印条件条件时(i == j);优化后的代码循环只能走到;所以我们就只能想办法寻找另外一种方式====》定义一个标记!!!
3.flag=1初始值赋值为1,写在内循环里,当满足(i%j == 0);我们就把值改为0;如果没有满足,最终flag还是为1,那么这个数就是我们想要的;当内循环结束,外循环+1,开始判断下一个数,flag又再次赋值为1,很巧妙吧!!!
2.4总结:
以上求100-200之间的素数,你学会了吗?有错误欢迎指出!!!