JavaScript 使用埃拉托斯特尼筛法找到质数

JavaScript 使用埃拉托斯特尼筛法找到质数

在这个问题中,我们的目标是利用JavaScript的功能来应用埃拉托斯特尼筛法算法,以找出质数。因此,在我们的程序中,我们将实现一个函数来找到给定限制下的质数。

理解问题陈述

问题陈述是在Javascript中编写一个函数,该函数将用于找到给定数字以内的质数。要实现此函数,我们将使用埃拉托斯特尼筛法算法。

什么是埃拉托斯特尼筛法算法

埃拉托斯特尼筛法是一种简单而经典的算法,用于找到给定范围内的所有质数。该算法通过定义从2到给定范围的所有数字的列表,然后迭代标记每个质数的倍数为非质数来工作。这个过程将继续,直到所有质数都被确定。

这个算法是一种高效的找到质数的算法,其时间复杂度为O(n log n)。因此,我们可以说这种方法比检查每个数是否为质数的蛮力技术要快得多。

给定问题的实现

为了实现这个算法,我们将创建一个大小为n+1的布尔数组,其中每个索引将表示从0到n的数字。数组中的所有元素最初都设置为true。这将表示每个数字都是质数。前两个元素即0和1被设置为false,因为它们不是质数。

然后,从第一个质数2开始,算法将循环遍历数组,通过将数组中的值设置为false来标记所有倍数为合数。现在,算法将移动到下一个未标记的数字,并重复此过程,直到找到所有质数。

最后,算法将循环遍历数组,并收集所有具有true值的索引,这表示它们是质数。

步骤

第1步 - 创建一个generatePrimes函数,以找到n个数字的质数。这里n是传递给函数的参数。

第2步 - 创建一个大小为n+1的数组,这个数组是布尔类型的,并将其所有值初始化为true。

第3步 - 从2到n的平方根循环遍历数组。如果当前数字是质数(即值为true),则循环遍历其所有的倍数并将它们在数组中的值设置为false。

第4步 - 再次从2到n循环遍历数组,并将所有质数添加到一个结果数组中。

第5步 - 返回质数的结果数组,并在屏幕上显示用法示例。

算法的代码

function sieveOfEratosthenes(n) {
   // Create a boolean array of size n+1
   let primes = new Array(n + 1).fill(true);
   // Set first two values to false
   primes[0] = false;
   primes[1] = false;
   // Loop through the elements
   for (let i = 2; i <= Math.sqrt(n); i++) {
      if (primes[i]) {
         for (let j = i * i; j <= n; j += i) {
            primes[j] = false;
         }
      }
   }

   let result = [];
   // Loop through the array from 2 to n
   for (let i = 2; i <= n; i++) {
      if (primes[i]) {
         result.push(i);
      }
   }

   return result;
}
console.log("All prime numbers up to 20");
console.log(sieveOfEratosthenes(20));

复杂度

所创建函数的时间复杂度为O(n log log n),其中n是布尔数组的大小。该算法从2迭代到n的平方根,并将每个质数的倍数标记为合数。循环迭代次数等于n log log n,因此最终的时间复杂度为O(n log log n)。因此,该算法对于查找质数非常高效。空间复杂度为O(n)。

结论

埃拉托色尼筛选法是一种系统的查找质数的方法。它通过查找小于等于给定限制的所有非质数,并将其标记为合数。这样剩下的数就是质数。该算法对于小到中等大小的数特别有效,并且在代码中非常容易实现。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程