只是想知道是否有人可以帮助我。 代码正在运行但是 是否有可能在保持其方法的同时缩短/删除此Algorithim中的一些不必要的代码 相同?我已经拿出了一些我不需要的东西,但我不确定是否还有其他东西可以拿走。
提前致谢!
public static void listPrimes(int maxNum) {
for (int i = 2; i < maxNum; i++) {
boolean isprime = true;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i > 1 && j < i && i % j == 0) {
isprime = false;
break;
}
}
if (isprime) {
System.out.println(i);
}
}
}
答案 0 :(得分:0)
好的,这不是为了缩短,而是为了加快速度。另请注意,有更有效的方法可以查找素数。
除了输出值之外,Math.sqrt(i)
可能是最昂贵的操作(一旦数字开始变大,它可能会占用更多的处理时间),你可能要考虑放它在循环之前变成一个变量。
只有2和不均匀的数字是素数,所以你可以硬编码2并跳过所有偶数。
如上所述, i > 1 && j < i
毫无意义。
SHORTEN - 只需检查isPrime
即可替换j
。
public static void listPrimes(int maxNum) {
System.out.println(2);
for (int i = 3; i < maxNum; i += 2) {
int sqrtI = (int)Math.sqrt(i);
int j;
for (j = 2; j <= sqrtI; j++)
if (i % j == 0)
break;
if (j == sqrtI + 1)
System.out.println(i);
}
}