基本方法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数:");
int num = scanner.nextInt();
boolean isPrime = true;
if (num <= 1) {
isPrime = false;
}
for (int i = 2; i < num; i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(num + " 是质数.");
} else {
System.out.println(num + " 不是质数.");
}
}
}
首先,从控制台读入一个整数 num。如果 num 小于等于 1,则该数不是质数。否则,用循环从 2 到 num-1 逐个判断是否是 num 的因数,如果存在一个因数,则 num 不是质数。最后根据判断结果输出相应信息。
优化方法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数:");
int num = scanner.nextInt();
boolean isPrime = true;
if (num <= 1) {
isPrime = false;
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(num + " 是质数.");
} else {
System.out.println(num + " 不是质数.");
}
}
}
该方法在基本方法的基础上进行了优化。在循环中,我们只需要判断 2 到 sqrt(num) 的整数是否是 num 的因数即可,因为一个数的因数一定是成对出现的,其中较小的因数一定小于等于该数的平方根。这样,循环次数可以减少,判断效率可以提高.
利用 Java 8 的 Stream API
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数:");
int num = scanner.nextInt();
boolean isPrime = num > 1 && java.util.stream.IntStream.range(2, (int)Math.sqrt(num) + 1).noneMatch(i -> num % i == 0);
if (isPrime) {
System.out.println(num + " 是质数.");
} else {
System.out.println(num + " 不是质数.");
}
}
}
该方法使用了 Java 8 的 Stream API。其中,IntStream.range(2, (int)Math.sqrt(num) + 1) 生成了一个从 2 到 sqrt(num) 的整数序列,noneMatch(i -> num % i == 0) 判断是否存在一个整数