import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 快速判定素数,用素数判定素数。比如求1-100之间的素数,
* 先求1-10之间的素数为[2,3,5,7],
* 再用11-100的数%[2,3,5,7],不能被整除的就是素数
*/
public class Prime {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入两个数并按回车键(格式为a b):");
while (true) {
long n1 = sc.nextLong();
long n2 = sc.nextLong();
List<Long> primeList = getPrime(n1, n2);
for (Long prime : primeList) {
System.out.print(prime + " ");
}
System.out.println();
}
}
public static List<Long> getPrime(long begin, long end) {
List<Long> result = new ArrayList<Long>();// result用于保存begin-end之间的所有素数
List<Long> tempPrime = new ArrayList<Long>();// 保存2-Math.sqrt(end)之间的所有素数
for (long i = 2; i <= Math.sqrt(end); i++) {
if (isPrime(i)) {
tempPrime.add(i);
// System.out.print(i + " ");
}
}
// System.out.println();
for (long prime : tempPrime) {
if (prime >= begin) {
result.add(prime);
}
}
long start = (long) Math.sqrt(end);
if (start > begin) {
begin = start;
}
for (long i = begin; i <= end; i++) {
boolean flag = true;
for (long prime : tempPrime) {
if (i % prime == 0) {
flag = false;
break;
}
}
if (flag) {
result.add(i);
}
}
return result;
}
/**
* 直接判定一个数是否为素数
*/
public static boolean isPrime(long n) {
for (long i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
if (n <= 1L) {
return false;
}
return true;
}
}
分享到:
相关推荐
**素数判定:Miller-Rabin算法** 在计算机科学和数论中,素数判定是一个重要的问题,特别是对于大整数。...在需要快速筛选素数的场景,如加密算法或大规模数据处理中,Miller-Rabin算法具有广泛的应用价值。
针对这个问题,文章“素数判定算法的改进”提出了改进策略。该策略根据不同的数值特性,优化了算法流程,从而显著提高了判断素数的速度。据描述,改进后的算法效率相比于经典算法提升了至少10/3到5倍,这意味着在...
### AKS素数检测算法(多项式时间内检测) #### 概述 AKS算法是由Manindra Agrawal教授及其两名学生Neeraj Kayal和Nitin ...未来的研究可能会进一步优化AKS算法的效率,甚至探索更高效的方法来解决素数检测问题。
素数的求解算法主要包括素数检测算法和生成素数列表的方法。 1. **基本素性测试算法**: - 最简单的方法是从2到\( \sqrt{n} \)依次检查每个数是否能整除\( n \)。 - 代码示例(C语言): ```c bool IsPrime...
1. 素数判定问题 素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法。 2. 原始算法 素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数。根据素数定义 只需要用2到n-1去除n,如果都除...
**Miller-Rabin素数判定算法** 素数是数学中的基本元素,它们在密码学、编码理论和计算机科学的多个领域都有着广泛的应用。然而,找出一个大整数是否为素数并非易事,尤其是在处理大数据时。传统的试除法效率低下,...
Manindra Agrawal教授和他的两个学生Neeraj Kayal和Nitin Saxena在坎普尔印度技术研究...AKS算法证明了可以应用一个确定的算法在输入规模的多项式时间内决定一个整数是否为素数的问题,而没有使用任何未证明的数学假定
【素数判定算法详解】 素数是数学中的基础概念,对于计算机科学,特别是在密码学、编码理论和数论等领域有着重要应用。素数判定是指确定一个给定的正整数是否为素数的过程。本文将探讨几种常见的素数判定算法。 1....
素数判定问题,即确定一个给定的正整数是否为素数,是计算的基本任务之一。传统的试除法虽然简单,但当面对大整数时,其时间复杂度较高,不适用于大规模计算。因此,随机算法成为了现代素数检测的首选方法。 描述中...
AKS 算法是由 Manindra Agrawal、Neeraj Kayal 和 Nitin Saxena 于 2002 年提出的一个素判定算法。该算法可以判断一个给定的正整数是否是质数。 AKS 算法的主要思想是使用模运算来判断一个数是否是质数。该算法可以...
判断质数 素数的多种方法 在计算机科学中,判断一个数是否为...判断质数是一个非常重要的计算机科学问题,有多种方法可以解决该问题。开发者可以根据实际情况选择合适的方法来判断质数,以提高程序的效率和可靠性。
#### 一、素数与快速判定 **素数**定义:在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为素数(Prime Number)。素数在数学和计算机科学中占有极其重要的地位。 #### 二、Miller-Rabin算法 **Miller-...
总结来说,米勒-拉宾素数判定算法是现代密码学、大整数分析等领域不可或缺的工具,它利用数论的原理和概率方法,高效地解决了大整数素性判定的问题。虽然不能保证完全正确,但在实际应用中通过增加测试次数可以得到...
本文主要介绍了通过C语言来求解素数的问题,首先是列举了素数最为基本的判定算法,其次是使用随机产生数值的方法和基本循环控制方法来实现素数的求解应用,最后认为针对方法的选择需要根据现实应用来选择最优的实现...
### 素数判定的无条件确定性多项式算法 #### 摘要与引言 本文档介绍了一种无条件确定性的多项式算法,该算法能够高效地判断一个给定的数字是否为素数。素数作为一种重要的数学对象,在整个数学尤其是数论领域占据...
总之,"素数判定 C++ ACM"是一个基础的编程问题,主要考察对素数概念的理解以及在C++中实现高效算法的能力。通过不断练习和优化,我们可以提高解决这类问题的速度和质量,这对于参与ACM竞赛或其他算法竞赛来说是必不...
**Miller-Rabin素性测试算法**是用于检测大整数是否为素数的一种高效方法,尤其在公钥密码学中有着广泛的应用。由于传统的试除法对于大整数的判断效率极低,因此引入了基于概率性质的素性测试算法。这个算法由Miller...