有点不太明白 为什么for遍历的值是(2,num//2+1)而不是(2,num)因为数学基础太差了 看百度质数就是不能被1和自己整除嘛

img

有点不太明白 为什么for遍历的值是(2,num//2+1)而不是(2,num)
因为数学基础太差了 看百度质数就是不能被1和自己整除嘛

对于一个数 num,如果它是一个质数,那么它的因数一定是小于等于 num/2 的,因此只需要遍历小于等于 num/2 的数即可。

例如,对于数字 15,它的因数有 1、3、5、15,因此我们只需要判断 2 到 8 之间的数是否为 15 的因数即可。

当然,也可以将遍历的范围设置为 (2,num),但这样会增加一些不必要的运算,例如对于 15,就会多判断大于8因数。

其实求质数的时候,一直循环到num开平方就足够了,从数学上可以证明如果连num开方都不能整除,大于这个数的数也都不能整除
num//2+1一般会比num开方要大,比num要小
写num当然在逻辑上也是没有问题的,只不过要多循环许多次,浪费一些时间而已

比如一个数是6,那么他的其他因数(除了1和本身)外都在数值/2+1这个范围内即<4内,大于这个范围的数是不可能成为他的因子的,就像6这个数,数字4和5就没有相除的必要的
若对你有帮助,麻烦采纳,谢谢