写成i的平方根 和 i 对于结果并没有多大的影响,使用前者会使程序的运算时间大大减少。
至于 为什么 算到i的平方根就可以了。我的理解是:
101和200分别开根号结果为10.4和14.1, 也就是 j 的最小,最大变化范围为2到10,2到14。
在101和200之间的任何一个数只要在上述区间不被整除,后面就不会再有数可以整除它了。
比如取101和200之间的某个数N。N如果不是素数,那个肯定能找到P和Q,是P*Q=N。而N<200.所以P和Q至少有一个不会大于14,也就是200的平方根。你可以多举几个例子试试帮助理解
数学公式我不清楚,但是因为程序是正确的,说明这样是正确的,我只是给你提供了一个理解该算法的思路,希望能采纳
判断一个数是不是素数就看它能不能被整除(1和自身除外)。
如果在j>=Math.sqrt(i)找到一个数能整除i,那么i/j的值n肯定<=Math.sqrt(i),即j遍历<=Math.sqrt(i)的过程中已经对前面的情况进行了判断。所以j<=Math.sqrt(i)即可判断i是否是素数,没有必要进行多余的运算
我也属初学者,但是这个问题我知道,这样是优化运算,数学当中可以证明,只用算到根号i就可以了,后面的不用计算
写成j<=i也是可以的,结果也是一模一样的,只不过是由于数学上证明了只要算到他的平方根后面就没必要再计算了,这样写能减少计算次数,增加效率,也有的人习惯写成 j<=i/2;