用“埃氏筛法”求2~100以内的素数。2~100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉5的倍数,……依此类推,最后剩下的就是素数。 要求使用数组和循环,最好使用一下增强的for语句。 提示:可以使用一个boolean类型的数组,所以“将某个数i去掉”,可以表示成a[i]=false。当然也可以使用其他方法。 请注意代码风格:类名、变量名的命名,以及必要注释等等; 请上传压缩后的源代码文件(为防上传失败,请同时把代码贴到文本框中)
时间: 2023-06-14 22:06:42 浏览: 84
以下是使用埃氏筛法求解2~100以内的素数的Java代码:
```java
public class SieveOfEratosthenes {
public static void main(String[] args) {
boolean[] isPrime = new boolean[101]; // 定义一个boolean类型的数组,表示2~100以内的数是否为素数
Arrays.fill(isPrime, true); // 初始化,默认所有数都是素数
isPrime[0] = isPrime[1] = false; // 0和1不是素数
for (int i = 2; i * i <= 100; i++) { // 从2开始枚举到sqrt(100)
if (isPrime[i]) { // 如果i是素数,就将i的倍数全部标记为非素数
for (int j = i * i; j <= 100; j += i) {
isPrime[j] = false;
}
}
}
// 输出所有素数
for (int i = 2; i <= 100; i++) {
if (isPrime[i]) {
System.out.print(i + " ");
}
}
}
}
```
代码中使用了一个boolean类型的数组`isPrime`,表示2~100以内的数是否为素数。首先将所有数都初始化为素数(即`isPrime[i] = true`),然后从2开始枚举到sqrt(100),如果当前的数i是素数,就将i的倍数全部标记为非素数(即`isPrime[j] = false`)。最后输出所有素数即可。
使用增强的for语句也可以实现,具体代码如下:
```java
public class SieveOfEratosthenes {
public static void main(String[] args) {
boolean[] isPrime = new boolean[101];
Arrays.fill(isPrime, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= 100; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= 100; j += i) {
isPrime[j] = false;
}
}
}
// 使用增强的for语句输出所有素数
for (int i = 2; i <= 100; i++) {
if (isPrime[i]) {
System.out.print(i + " ");
}
}
}
}
```
阅读全文