返回信息流public static boolean isPrime(long n) {
if (n <= 3) {
return n > 1;
}
if (n % 2 == 0 || n % 3 == 0) {
return false;
}
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
问题:循环里面为啥步长是6???
下面的判断为啥还要判断能否被i+2整除???
这是一条镜像帖。来源:北邮人论坛 / java / #48712同步于 2016/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]判断一个数是否为素数的奇葩算法,没看懂,大神求解
polarbear
2016/3/20镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
步长为6的话, 5, 6, 7, 8, 9, 10,是一个循环里要考虑的数,6,8,9,10都可以分解为2*x,或者3*x,然后步长再加6, 6可以分解为2*3, 所以加起来是2*(x+3),或者3* (x+2),所以都能被2 或 3整除,像沙发说的只需考虑5 和 7
是我手机的问题还是你程序的问题,你写全代码了吗,我感觉括号都不匹配
【 在 polarbear 的大作中提到: 】
public static boolean isPri...
这个他写的代码对吗?输入121输出就是素数吧,但是121不是素数额
【 在 fuxuemingzhu 的大作中提到: 】
这个是很有名的一个算法了。排除法,效率很高
输出false,i=5,i+6=11,此时能被121整除。。
【 在 cold2wind 的大作中提到: 】
: 求解释,121输进去输出结果是什么
: 5加1/3/5是偶数
: 5加4是9能被3整除
: ...................