JavaScript 中所有素数的和


在给定的问题陈述中,我们必须借助 Javascript 功能计算所有素数的和。因此,为了计算总和,我们将设置素数的上限。

理解问题

问题是计算小于给定上限的所有素数之和。素数是一个大于 1 的正整数,并且除了 1 和其自身之外没有其他约数。例如,如果素数的限制是 10,则小于 10 的素数是 2、3、5、7,这些数的和是 2 + 3 + 5 + 7 = 17。因此,所需结果应为 17。因此,我们的任务是实现代码以生成给定限制的素数之和。

给定问题的逻辑

为了解决这个问题,我们将使用 Javascript。为此,我们将基本上使用两个函数来获得所需的结果。

第一个函数将用于检查当前数字是否为素数。我们还将验证 2 到该数字平方根之间是否存在任何约数。如果我们找到了当前数字的约数,那么我们可以说该数字不是素数,因为素数不能被任何其他数字整除。结果我们将说该数字不是素数。如果未验证该条件,我们将返回该数字作为素数。

第二个函数用于计算声明范围内所有素数的和。因此,我们将使用循环遍历值。然后,使用我们定义的第一个函数,我们将确定该数字是否为素数。如果该数字是素数,则添加该值以获得总和,最后我们将获得所需的结果作为所有素数的和。

算法

步骤 1:由于我们必须计算给定限制下素数的和,因此我们将定义一个函数并将参数 num 作为输入传递。

步骤 2:众所周知,素数从 2 开始。因此,我们将定义一个条件来检查给定的输入数字是否大于或等于 1。此条件检查是否存在任何负数,因为负数不是素数,因此返回 false。

步骤 3:现在,我们将使用 for 循环迭代从 2 到该数字平方根的数字。并检查条件,如果找到约数,则该数字不是素数,因此我们将返回 false。

步骤 4:在上述条件之外,如果没有找到约数,则该数字是素数,因此我们将返回 true。

步骤 5:使用另一个函数,我们将计算给定数字之前所有素数的和。我们将在此函数中传递一个参数作为限制。此限制输入将定义将添加素数的范围。

步骤 6:由于我们需要将给定素数的和存储起来,因此我们将使用一个变量来存储素数的和并将值初始化为零。

步骤 7:现在我们需要迭代从 2 到限制的数字。在循环内,我们将检查该数字是否为素数。如果我们遇到素数,则将总和添加到 sum 变量中。

步骤 8:由于我们需要将 sum 变量显示到控制台,因此我们将返回 sum 的值。

示例

 // Function to check the number is prime
function isPrime(num) {
   if (num <= 1) {  // 1 and negative numbers are not prime
      return false;
   }
   // check for divisors from 2 to square root of the number
   for (let i = 2; i <= Math.sqrt(num); i++) {
      // if a divisor is found, the number is not prime
      if (num % i === 0) {
         return false;
      }
   }
   // if no divisors are found, the number is prime
   return true;
}
 // Function to get the sum of all the primes
function sumOfPrimes(limit) {
   let sum = 0;

   for (let i = 2; i <= limit; i++) {
      // check if the number is prime
      if (isPrime(i)) {
         // add the prime number to the sum
         sum += i;
      }
   }

   return sum;  // return the final sum
}

const limit = 50; // Change this value to set the upper limit
const sum = sumOfPrimes(limit);
console.log("Sum of prime numbers up to", limit, "is", sum);

输出

Sum of prime numbers up to 50 is 328

复杂度

用于检查数字是素数还是非素数的第一个函数使用循环迭代数字,因此此函数的复杂度为 O(sqrt(n)),其中 n 是给定的数字。此函数消耗的空间为 O(1),因为它使用固定数量的内存来存储变量。

第二个函数迭代从 2 到给定限制的素数。对于每次迭代,我们都调用了上述函数,该函数的时间复杂度为 O(sqrt(n))。因此,此函数的时间复杂度为 O(limit * sqrt(n))。此函数的空间复杂度也是 O(1),因为该函数使用固定数量的内存来存储变量。

结论

我们创建的代码提供了一种有效的方法来计算 Javascript 中给定限制下所有素数的和。正如我们已经实现两个函数来获得所需的总和一样。此函数的时间复杂度取决于限制和限制内的最大数字。

更新于:2023年8月16日

2K+ 次查看

开启你的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.