素数,也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。也就是只能被自己和1整除的数。
思路:只需要将让 j 一个一个的去除 i 即可。例如,判断179是不是素数,可以用2 ~ 178中的每一个数字去除179,如果全部不可以整除179,就说明179是素数。同时flag的值为1,179被打印。
以上是最直接的方法,但是运行起来的效率不是很高。仔细思考一下我们可以发现,所有的素数都是奇数,所以我们可以将判断对象 i 改为100 ~ 200之间的奇数,从而进一步优化我们的代码。
将 i 的初值改为101,再将i++改为i += 2
此时我们已经将运行效率提高了一半,不妨再开动一下我们聪明的大脑,我们又会发现一个数的两个因数中至少有一个数小于等于这个数的平方根。然后又双叕叕可以优化代码了!!!
举个例子 ,将36简单拆为两个因数,可以得到下方的四组因数,左半边蓝框的6 ,4,3,2总是小于或者等于根号下36。由于右半边红框的6,9,12,18与左边蓝框的6,4,3,2一一对应为同一组36的因数,如果36可以被4整除那就没有必要再用9去除36了。因此我们在判断36是不是素数的时候,只需用2 ~ 6(根号下36)中的每一个数字去除36即可。
最后将除数 j 的范围限制为 2 ~ 根号下 i 就可以了,记得引用<math.h>的头文件
三种方法的运行截图如下:
最后,真心希望大家能多多在评论区热热闹闹的互动交流。您要是有啥高见,欢迎随时提提建议,您的只言片语对我来说都是“金子”呢!;要是有任何不动的地方,千万别客气,尽管向我提问,我定知无不言,言无不尽。小的在此恭候各位的大驾光临啦!