① 素数打印的第1/n种境界
练习:打印100~200 之间所有的素数
分析:要打印100~200之间所有的素数,得先产生100~200之间所有的数,再对每个数进行判断,判断其是否为素数,是素数就打印不是素数就不打印,判断下一个数.
根据分析,首先需要利用for循环来产生100~200之间所有的数. 再在循环体中对每一个数进行判断.根据数学原理,判断一个数是不是素数,就要看它除了 1 和 它本身 这两个因子之外,还有没有其他因子,也就是对于每个数,都需要产生 2~(它本身-1) 的数进行试除.
下面来看源代码~
你看懂了嘛~
需要注意的是,有的小伙伴可能执着于cpp的语法,总喜欢在循环参数中定义变量并赋值(像我一样哈哈哈) 在这个地方的j 循环当中,如果直接在循环参数中定义并赋值的话,按照正常的思路,我们会在写下面 if 语句时直接写一个(j==i) 这时候编译器会报错,原因是你是在第二个for 中定义了一个j 变量,而if 语句按照思路是在里层的for 循环执行完之后再执行的,所以在if后面的判断条件中,编译器不知道j 这个变量是啥,所以你得在大的循环当中把j定义下来,而不是在里层的for循环参数里定义 j
运行结果:
② 素数打印的第2/n种境界
第二种境界与第一种境界差不多,只是有一些细微的差别~ 咱们废话少说,直接来看源代码~
你看~ 这样是不是就避开第一种境界中需要注意的点啦,我相信这种解法是cpp 小伙伴青睐的哦~
③ 素数打印的第3/n种境界
接下来,我们开始进入这一篇的重头戏~
各位小伙伴是否觉得 每一个i都要试除 2~i-1 这么多数是不是挺麻烦的.
那么为了提高这个代码的效率 , 我们应该怎么做呢?
从i入手来提高的话,你想,在100~200之间的偶数是不是肯定不是素数呀! 因为偶数一定有一个因子2对不?
所以我们只用判断100~200 之间的奇数就好啦,这样是不是在源头上就减少了一半的数据呀~
下面来看源代码~
④ 素数打印的第4/n种境界
这一重天,是从 j 下手的.
你是不是觉得,试除这么多数很累,当然,我们累,计算机也累啊! 所以我们要想方设法把 j 变少一点.
怎样变少呢?
你想,对于一个数来说,它的两个因子的大小无非两种情况,一个因子小于它的开平方,一个因子大于它的开平方,另外一种情况是,两个因子都等于它的开平方,也就是一大一小,或者相等,不可能两个都小于它的开平方.
如果你还是不能理解,那就让小编给你举一个例子吧~
eg:16=4×4,则称4为16的开平方,这时两个因子相等都为4. 也就是符合上述的第二种情况,16=2×8 其中2<4 而8>4 这时符合上述的第一种情况.
反之,如果两个因子都小于4.那么它们的乘积一定小于16,如果两个因子都大于4,那么它们的乘积一定大于16.所以对于一个i 来说,只需要在它的开平方左侧试除就行,而不用用所有的数试除.
原因就是对于16来说,2×8 与8×2 是相互的,换言之,如果在4之前没有找到2这个因子,那么在4之后就一定找不到8这个因子.
不知道各位小伙伴能否理解~
下面来看源代码~
⑤ 总结
好啦~ 以上就是素数打印的4/n种境界,希望能被小伙伴们看的起,希望能对不太理解的小伙伴有所帮助!
另外,关于这一篇及"整数的拆分打印" 中所包含的所有的代码,我都放在:test 4_14/test.c · 等同于/C.src - 码云 - 开源中国 (gitee.com)
想要深入理解的小伙伴可以看看哦~
好啦~ 这一篇就到这里,我们下一篇再见!