public static boolean isPrime(int a) { boolean flag = true; if (a < 2) {// 素数不小于2 return false; } else { for (int i = 2; i <= Math.sqrt(a); i++) { if (a % i == 0) {// 若能被整除,则说明不是素数,返回false flag = false; break;// 跳出循环 } } } return flag; }
4 回答
已采纳
JustWannaHugU
TA贡献452条经验 获得超796个赞
同学,你不明白的地方是for (int i = 2; i <= Math.sqrt(a); i++)吗?
这是一个素数运算定理,已经证明出来的,可以拿来直接用
定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d.
证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n.
如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子.
它的时间复杂度O(sqrt(n)/2), 比普通的素数算法速度提高O((n-sqrt(n))/2).
添加回答
举报
0/150
提交
取消