【发布时间】:2016-06-30 03:48:07
【问题描述】:
我的作业内容如下:
编写一个程序,找出介于 1 和您允许用户输入的某个数之间的所有质数。
- 查找介于 0 和用户输入的数字之间的质数。
- 打印这些质数,每行一个。
- 在每个素数后添加一个冒号,然后打印出所有被排除的非素数。
基本上,这些非素数是素数的倍数。
例如,输出将如下所示:
2: 4 6 8 10 12 14 16 18...
3: 9 15 21 27
我做了素数。我不知道如何计算和显示倍数?请帮忙!
package assignment4;
import java.util.Scanner;
public class Assignment4 { /**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
final int START = 1;
System.out.print("Enter the end number number : ");
int end = s.nextInt();
System.out.println("List of prime numbers between " + START + " and "
+ end);
for (int i = START; i <= end; i++) {
if (isPrime(i)) {
System.out.println(i + ":");
}
}
}
public static boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;}
}
【问题讨论】:
-
你只需要创建一个数组并在其中插入素数...
-
一些提示:(1)
for的第三个表达式不必是x++的形式。您可以有一个看起来像for (int j = 2 * i; j <= end; j += i)的for循环,它每次都会将i添加到索引中。 (2) 看起来您只能打印每个倍数一次(您在以 2 开头的行上打印 6,因此您不能在“3”行上打印它)。有几种好方法可以跟踪您已打印的数字:Set和布尔数组。 -
从问题的措辞,尤其是“已消除的非素数”这句话来看,我认为您的老师希望您使用埃拉托色尼筛算法来查找素数。维基百科页面在这里:en.wikipedia.org/wiki/Sieve_of_Eratosthenes
-
@OP 答案已编辑