优化这段代码 int count = 0; for (int i = 2; i <= 10000; i++) { boolean flag = true; for (int j = 2; j <= i/2; j++) { if (i%j==0){ flag = false; } } if (flag){ System.out.print(i+"\t"); count += 1; } if (count%10==0){ System.out.println(); } } System.out.println(); System.out.println("一共有"+count+"个素数");
时间: 2024-02-14 20:25:08 浏览: 72
这段代码可以进行一些优化来提高效率。以下是几个优化建议:
1. 在内层循环中,可以将判断条件改为`j <= Math.sqrt(i)`,因为一个数的因子不会超过它的平方根。这样可以减少循环次数。
2. 可以使用一个额外的数组来存储已经判断过的数字是否是素数,避免重复判断。例如,可以使用一个`boolean`类型的数组`isPrime`,其中`isPrime[i]`表示数字`i`是否是素数。
3. 在输出素数时,可以先将素数存储在一个列表中,然后一次性输出。这样可以减少输出的次数。
下面是优化后的代码示例:
```java
int count = 0;
boolean[] isPrime = new boolean[10001];
List<Integer> primes = new ArrayList<>();
for (int i = 2; i <= 10000; i++) {
isPrime[i] = true;
}
for (int i = 2; i <= 10000; i++) {
if (isPrime[i]) {
primes.add(i);
count++;
if (count % 10 == 0) {
System.out.println();
}
for (int j = i * i; j <= 10000; j += i) {
isPrime[j] = false;
}
}
}
System.out.println();
System.out.println("一共有" + count + "个素数");
for (int prime : primes) {
System.out.print(prime + "\t");
}
```
通过以上优化,可以减少循环次数和输出次数,提高代码的执行效率。
希望这些优化对您有帮助!如果还有其他问题,请随时提问。
阅读全文