还记得当时学习数据结构时老师留过一道作业题:编写程序打印出小于命令行参数所给定的整数的所有素数。当时我就是简单的利用穷举法实现的,呵呵,就是一个一个地进行判断。后来作业交了上去,也就不了了之了。老师并没有进行讲解,今天突然看到了应用数组解决这一问题的埃拉托色尼筛算法,恩!感觉很优美,省去了穷举法的大量的除法运算,下面我们就来看看其中的奥秘。
首先我再明确一下素数的概念:一个正整数如果不等于1而且除了自己和1没有其他正因数,则称其为一个素数(也称质数);否则称其为合数。1既不是素数也不是合数。
埃拉托色尼筛算法的思想是:申请一个布尔数组a,如果i是素数,就把a[i]置为true,否则,就把a[i]置为false。首先,把所有数组元素都置为true,表明所有数都是素数。然后再把对应于下标为非素数(是已知素数的倍数,因为2是我们知道的最小的素数,所以以2作为跌代的起点)的数组元素设为false。如果在所有较小素数的倍数都被设为false值后,a[i]的值仍然是true,那么它肯定是一个素数。用JAVA实现的代码如下:
- public class Primes {
- public static void main(String[] args) {
- int N = Integer.parseInt(args[0]);
- boolean[] a = new boolean[N];
- for(int i = 2; i < N; i++) {
- a[i] = true;
- }
- for(int i = 2; i < N; i++) {
- if(a[i] != false) {
- for(int j = i; j*i < N; j++) {
- a[i*j] = false;
- }
- }
- }
- for(int i = 2; i < N; i++) {
- if(a[i]) {
- System.out.println("" + i);
- }
- }
- }
- }
分享到:
相关推荐
可以批量求出 大范围内的 素数。这个算法有点复杂。想要最好的可以去我的资料中 找另外一个。反正都是免费的~
点击按钮后,应用会调用埃氏筛算法,找到指定范围内的所有素数,并将结果显示在TextView或者ListView等组件上。 以下是可能的Java代码实现: ```java public class MainActivity extends AppCompatActivity { ...
埃拉托色尼素数筛选法,也称为埃拉托斯特尼筛法,是一种古老而有效的算法,用于找出一个给定范围内的所有素数。该方法由古希腊数学家埃拉托色尼提出,通过一系列的排除过程,可以有效地找到所有小于给定数的素数。...
您可能用来完成该作业的算法称为试算,而且速度很慢。 在确定小于足够大整数的所有素数时,即使是计算机也需要一段时间才能使用此算法。 但是一位希腊数学家从不同的角度看待这个问题。 这个 Maven 项目使用一个 ...
一种应用“Eratosthenes 筛法”来查找和显示由开始和结束指定的整数之间的素数的算法。 在显示的末尾,添加找到了多少个素数(计数)以及找到它们所需的时间(时间)。 这是一个我刚刚玩过的应用程序,试图在 ...
埃拉托色尼筛法(Sieve of Eratosthenes)是一种古老且高效的算法,用于找出小于或等于给定数N的所有素数。该方法首先将1到N的整数列表中的所有数字视为可能的素数,然后从2开始,对于每一个已知的素数,将其所有的...
求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。
该程序的灵感来自艺术品: Sieb des Eratosthenes(Eratosthenes 的筛子)(1971 年)来自 Rune Mields(德国画家,1935 年生) 这幅来自她的 9 幅面板艺术作品的作品将素数显示为白点。 左栏显示89栏排列的数字,...
3. 素数检测:暴力法、筛法(埃拉托色尼筛、欧拉筛、线性筛)、Miller-Rabin测试。 4. 分解质因数:找出一个数的所有质因数。 5. 欧拉函数:φ(n)表示小于等于n且与n互质的正整数的数量。 6. 欧拉定理和快速幂:快速...
然而,描述中提到的却是“埃拉托色尼筛法(Sieve of Eratosthenes)”,这是计算数学中的一个算法,用于找出给定范围内所有的素数,与图形图像处理并无直接关联。这可能是压缩包内容的一个误解或者错误分类,因为两...
2. **埃拉托色尼筛法**:这是求解素数的经典算法,主要考察循环和条件判断的运用,以及对算法复杂度的理解。需要理解如何从2开始遍历到N,标记合数,最终得到所有小于N的素数。 3. **方程求解问题**:这涉及到搜索...
2. 埃拉托色尼筛法:这是寻找素数的经典算法,通过遍历从2到N的整数,标记掉每个素数的所有倍数,最后未被标记的数字即为素数。时间复杂度为O(N log log N)。 3. 方程求解问题:可以使用回溯法或穷举法,限制变量在...
java笔试题算法多种语言的埃拉托色尼筛子 以各种语言实现 Eratosthenes 筛以展示 GraalVM 和 Truffle 的强大功能。 请先下载后再进行实验。 已经过测试可以与版本19.3.1 。 Ruby速度 使用以下命令可以发现 GraalVM ...
2. **埃拉托色尼筛法**:这是求解素数的经典算法,通过遍历从2到N的数,将倍数剔除,留下素数。关注点在于如何优化循环和减少计算量以提高效率。 3. **方程求解**:这是一个数学问题,需要编程找出特定条件下的整数...
2. **素数问题**:埃拉托色尼筛法是一种用于找出所有小于给定数的素数的高效算法。基本思想是从2开始,标记其倍数为非素数,直到所有小于给定数的素数都被找出。 3. **方程求解问题**:这可能需要使用穷举搜索或...
埃拉托色尼筛法是一种古老的算法,用于寻找一定范围内所有的质数。这个算法的基本思想是通过逐步排除合数(非质数)来找出质数。具体步骤如下: 1. 创建一个包含从2到目标数的所有整数的列表。 2. 从2开始,标记2的...
2. 求素数问题:埃拉托色尼筛法是一种高效的求素数算法。从2开始,将所有倍数剔除,直到达到目标值N,留下的数就是素数。时间复杂度为O(N log log N)。 3. 方程求解问题:这是一道回溯法或动态规划问题,需要在整数...
2. **求素数问题**:埃拉托色尼筛法是一种用于找出一定范围内所有素数的算法。它通过逐步排除非素数来实现,从最小的质数2开始,删除它的倍数,接着处理下一个未删除的数,直到处理完所有数。 3. **方程求解问题**...