学习使用 Java 8 Stream API 编写程序以找到第一个质数,其中 N 是应用程序的任何给定输入数。
质数 (P) 是一个大于 1 的数,它的因数只有 1 和数 (P) 本身。一般来说,我们可以通过以下步骤判断一个数是否为质数:
sqrt(N)
并尝试将 N 与当前奇数相除。如果任何奇数的余数为 0,则该数不是质数。static boolean isPrime(int number) { if(number <= 2) return number == 2; else return (number % 2) != 0 && IntStream.rangeClosed(3, (int) Math.sqrt(number)) .filter(n -> n % 2 != 0) .noneMatch(n -> (number % n == 0)); }
给定程序使用 Java 8 stream api 查找序列中的前 N 个素数。在这个程序中,用户被要求输入他选择输入他想要生成的素数的数量。
例如。如果用户输入 100,程序将生成前 100 个素数(从 2 开始)。
package com.cundage.example; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; import java.util.stream.IntStream; public class Main { public static void main(String[] args) { //Read input from console - optional Scanner scan= new Scanner(System.in); System. out.println("Enter a number : "); int number = scan.nextInt(); scan.close(); List<Integer> primes = IntStream.range(2, Integer.MAX_VALUE) .filter(n -> isPrime(n)) .limit(number) //Limit the number of primes here .boxed() .collect(Collectors.toList()); System.out.println(primes); } static boolean isPrime(int number) { if(number <= 2) return number == 2; else return (number % 2) != 0 && IntStream.rangeClosed(3, (int) Math.sqrt(number)) .filter(n -> n % 2 != 0) .noneMatch(n -> (number % n == 0)); } }
程序输出。
Enter a number : 10 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] ============ Enter a number : 30 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113]
将有关在 Java 中打印所有前 N 个素数 的问题交给我。
快乐学习!!
参考:
地址:https://www.cundage.com/article/find-first-n-prime-numbers.html