寻找前N个质数的Java程序

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(276)   2023-06-26 07:54:18

学习使用 Java 8 Stream API 编写程序以找到第一个质数,其中 N 是应用程序的任何给定输入数。

1.素数算法

质数 (P) 是一个大于 1 的数,它的因数只有 1 和数 (P) 本身。一般来说,我们可以通过以下步骤判断一个数是否为质数:

  1. 2 只是质数,也是偶数。因此,如果给定数 N 为 2,则它是质数。
  2. 如果给定的数字 N 是偶数,则它不是质数。
  3. 找出 N 的平方根。遍历所有奇数直到 sqrt(N) 并尝试将 N 与当前奇数相除。如果任何奇数的余数为 0,则该数不是质数。
  4. 否则——数字是 PRIME。
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));
}

2. 寻找前N个素数的程序

给定程序使用 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 个素数 的问题交给我。

快乐学习!!

参考:

维基百科
IntStream Java 文档

地址:https://www.cundage.com/article/find-first-n-prime-numbers.html

相关阅读

了解用于确定给定数字是否为素数的高效算法。还学习在 Java 8 程序中实现素数算法。 1.质数 素数是大于1的自然数,不能由两个比1以外的更小的自然数相乘得到。 换句话说,质数 (P) 是一个...
学习使用 Java 8 Stream API 编写程序以找到第一个质数,其中 N 是应用程序的任何给定输入数。 1.素数算法 质数 (P) 是一个大于 1 的数,它的因数只有 1 和数 (P) ...
学习编写程序,使用 Java 8 流 API 从 1 和 N 中找出所有质数,其中 N 是应用程序的任何给定输入数。 1.素数算法 质数 (P) 是一个大于 1 的数,它的因数只有 1 和数 (...
学习编写一个简单的 java 程序 来验证给定的数字是否是快乐数字。 1.什么是开心号 如果一个数在重复被其数字的平方和替换时会产生 '1',则该数被称为快乐数。换句话说,如果我们从 Happy...
Spring Boot Data JPA Query By Example 教程展示了如何使用 Spring Data JPA Query By Example 技术创建查询。 春天 是用于创建...
编写一个简单的 java 程序来验证给定的数字是否为 disarium number。 1.镝数 如果一个数字以其各自的位置为幂的数字之和等于原始数字,则该数字称为 DISARIUM。 例如,考...
学习编写一个简单的 Java 程序来验证给定数字是否为 pronic number。 1. 什么是 pronic 数 pronic 数是两个连续整数的乘积,即 ‘n x (n + 1)’ 形式的...
什么是并行数据库流? 阅读这篇文章,了解如何使用并行流和 Speedment 并行处理来自数据库的数据。在许多情况下,并行流可以比通常的顺序流快得多。 随着 Java 8 的推出,我们得到了期待...
3 个使用 Long.parseLong(String)、Long.valueOf(String) 和 new Long(String) 构造函数将 String 转换为 long 值的 Jav...
了解为什么在 Java 中使用数组时会出现 ArrayStoreException 以及如何确定根本原因并修复此错误。 1. ArrayStoreException 的根本原因 Java 数组是...