In mathematics, the Sieve of Eratosthenes (Greek: κόσκινον Ἐρατοσθένους) is a simple, ancient algorithm for finding all prime numbers up to a specified integer.[1] It works efficiently for the smaller primes (below 10 million).[2] It was created by Eratosthenes, an ancient Greek mathematician. However, none of his mathematical works survived—the sieve was described and attributed to Eratosthenes in the Introduction to Arithmetic by Nicomachus.
A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself.
[素数的定义是,一个仅能被1和本身整除的自然数]
To find all the prime numbers less than or equal to a given integer n by Eratosthenes' method:
[可以通过以下的埃拉托色尼筛选法寻求所有小于整数n的素数]
Create a list of consecutive integers from two to n: (2, 3, 4, ..., n). [列出从2到n的一串连续自然数]
Initially, let p equal 2, the first prime number. [开始,先把2当作第一个素数,并赋值给变量p]
Strike from the list all multiples of p less than or equal to n. (2p, 3p, 4p, etc.) [将该列自然数中划掉p的倍数]
Find the first number remaining on the list after p (this number is the next prime); replace p with this number. [将剩下的自然数按原来顺序重新组成新的一列,并将第一个数赋给变量p]
Repeat steps 3 and 4 until p2 is greater than n. [重复第三第四步,直到p的平方大于n]
All the remaining numbers in the list are prime. [剩下的自然数就是所有小于n的素数]
public static List<Long> find_prime_below_number(long number){
int exe_number = 0;
boolean close = false;
List<Long> numberSet = new ArrayList<Long>();
List<Long> resultSet = new ArrayList<Long>();
for(long i=3; i<number; i+=2){
numberSet.add(i);
exe_number++;
}
double half = Math.sqrt(number);
do{
Long curN = numberSet.get(0);
resultSet.add(curN);
for(int j=0; j<numberSet.size(); j++){
exe_number++;
long l = numberSet.get(j);
if(l%curN==0){
numberSet.remove(j);
}
}
if(curN>half){
close = true;
}
}while(!close&&numberSet.size()!=0);
if(numberSet.size()!=0){
for(Long n : numberSet){
exe_number++;
resultSet.add(n);
}
}
System.out.println("exe_number:"+exe_number);
return resultSet;
}
当找1000000以下的素数时,执行就挂了
肯定有问题
因为原算法说了是10 million
以下的数字~
一千万以下啊~
想办法解决
分享到:
相关推荐
SieveOfEratosthenes
Eratosthenes筛选法,又称为埃拉托斯特尼筛法,是古代希腊数学家埃拉托斯特尼提出的一种寻找所有小于给定整数的质数的算法。该方法基于一个基本观察:任何合数(非质数)都有至少一个小于或等于其平方根的因数。因此...
标题中的"Sieve of Eratosthenes"是一种古老而有效的算法,用于找出小于给定整数的所有质数。这个算法由古希腊数学家埃拉托斯特尼提出,因此得名。在Python编程语言中实现该算法,我们可以深入了解Python的基础、...
**埃拉托色尼素数筛选法** 埃拉托色尼素数筛选法,也称为埃拉托斯特尼筛法,是一种古老而有效的算法,用于找出一个给定范围内的所有素数。该方法由古希腊数学家埃拉托色尼提出,通过一系列的排除过程,可以有效地...
筛选法求素数是计算机程序设计中的一种常见算法,用于找出一定范围内所有素数。在C++编程语言中实现这个算法,我们可以利用其强大的数组处理能力和控制结构来高效地完成任务。下面将详细介绍筛选法(也称为...
求n以内最大的k个素数c要找出n以内最大的k个素数,可以使用筛选法(Sieve of Eratosthenes)来解决。筛选法是一种常见的寻找素数的方法,基本思想是从2开始,将其倍数标记为非素数,然后继续找到下一个未被标记的数...
**埃拉托色尼筛选法(Sieve of Eratosthenes)是古代数学家埃拉托色尼提出的一种寻找素数的有效算法。这个方法基于一个简单原理:从2开始,将所有能被2整除的数标记为合数,然后从下一个未标记的数3开始,将所有它的...
埃拉托色尼筛法(Sieve of Eratosthenes)是一种古老且高效的算法,用于找出小于或等于给定数N的所有素数。该方法首先将1到N的整数列表中的所有数字视为可能的素数,然后从2开始,对于每一个已知的素数,将其所有的...
function sieveOfEratosthenes(n) { let primes = new Array(n + 1).fill(true); // 初始化数组 primes[0] = false; primes[1] = false; for (let i = 2; i (n); i++) { if (primes[i]) { // 如果i是素数 for...
**埃拉托色尼筛法(Sieve of Eratosthenes)** 埃拉托色尼筛法是一种古老的算法,用于寻找一定范围内所有的质数。这个算法的基本思想是通过逐步排除合数(非质数)来找出质数。具体步骤如下: 1. 创建一个包含从2...
“sieve-of-Eratosthenes.rar_JAVA埃氏筛法”这个标题提到了一个经典的算法——埃氏筛法(Sieve of Eratosthenes),并且指出这是用Java语言实现的。埃氏筛法是一种用于找出指定范围内所有素数的有效方法,特别适合...
Sieve of Eratosthenes 法是一种使用筛选法来判断质数的方法。该方法的思想是,通过创建一个布尔数组,标记出所有小于该数的质数,然后判断该数是否为质数。这种方法的时间复杂度为O(n log(log n)),其中n为要判断的...
本文介绍的素数筛选法指的是埃拉托斯特尼筛法(Sieve of Eratosthenes),这是一种古老而高效的算法。其基本思想是:首先将2到n的所有整数写出来,然后从2开始,将2的倍数都划掉;接着找下一个没有被划掉的数,即3,...
一种常见的算法是埃拉托斯特尼筛法(Sieve of Eratosthenes)。该算法通过从2开始,依次将所有倍数标记为非质数,从而找出所有小于给定范围的质数。下面是一个基于埃拉托斯特尼筛法的Java程序实现: ```java public...
求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。
1. **埃拉托斯特尼筛法(Sieve of Eratosthenes)** 这是最古老的素数筛选方法之一,通过从2开始标记每个倍数,逐步剔除非素数。在Matlab中,可以通过创建一个布尔型数组来表示每个数字是否为素数,然后逐个处理...
使用函数求素数和求一系列数字...如果你想找到一个更大范围内的素数和,你可能需要使用更高效的素数寻找算法,比如埃拉托斯特尼筛法(Sieve of Eratosthenes)。这是一个在Python中实现的基本版本的埃拉托斯特尼筛法:
**Eratosthenes筛法求素数** Eratosthenes筛法,又称为埃拉托斯特尼筛法,是一种古老的寻找所有小于给定数N的素数的有效算法。这个算法是由古希腊数学家Eratosthenes提出的,因此得名。在计算机科学和信息技术领域...