除二外素数是奇数,所以先输出2从3开始步长为2
易知如果一个合数i能被在[[sqrt(i)],i)中的数整除,
那么除得的商一定在(1,[sqrt(i)]]范围内,
唯一分解定理:每个大于1的正整数均可分解为有限个素数的积
所以只需要搜索[2,[sqrt(i)]]的素数.
上面的代码应该改成k<=sqrt(i)
因为一个数从1循环到他本身的话,后面的数是前面的数的倍数,为了提高效率,有人研究出来只要计算到一个数的根号就可以了。。
例如9,从1循环到3就可以找到除断的数了。
一个数a,如能分成两个数a=b*c
则b或c>=sqrt(a),所以只要判断倒sqrt(a)即可
不信你自己找几个数试试
这种代码不好K
sqrt(i)就是求i的平方根