JavaScript判断数字是否为质数的方法汇总

JavaScript判断数字是否为质数的方法汇总

判断数字是否为质数是一个常见的算法问题,针对这一问题,我们可以有多种方法来解决。

什么是质数

所谓质数,就是只能被 1 和自身整除的正整数。例如:2、3、5、7、11、13、17、19、23、29、31、37等等。

方法一:暴力枚举法

暴力枚举法,即从2开始,依次枚举到 Math.sqrt(n) 就能判断出一个数是否是质数。

function isPrime(num) {
  if(num <= 1) return false; // 1不是质数
  for(let i = 2; i <= Math.sqrt(num); i++) {
    if(num % i == 0) return false;
  }
  return true;
}

console.log(isPrime(17)) // true
console.log(isPrime(27)) // false

上面的代码中,我们先判定num是否小于等于1,如果是,直接返回false(1不是质数)。然后使用循环从2开始,到 Math.sqrt(num)结束,如果在循环中发现某个数字能够整除num,就说明num不是质数,直接返回false。如果一直到循环结束也没有返回false,则说明num是质数。

方法二:埃氏筛法

埃氏筛法,又叫做厄拉多塞筛法,是一种筛选素数的方法。该方法的基本思路是:先确定需要求出质数的范围 n,然后申请一个长度为 n+1 的布尔类型数组,数组值全部初始化为 true,表示所有数字都是质数。然后从 2 开始枚举,若当前数字为素数,则从它的平方开始,将后续所有该数的倍数都标记为非素数。

function getPrime(n) {
  let arr = []
  for(let i = 0; i <= n; i++) {
    arr[i] = true
  }
  for(let i = 2; i * i <= n; i++) {
    if(arr[i]) {
      for(let j = i * i; j <= n; j += i) {
        arr[j] = false
      }
    }
  }
  let res = []
  for(let i = 2; i <= n; i++) {
    if(arr[i]) {
      res.push(i)
    }
  }
  return res
}

console.log(getPrime(20)) // [2, 3, 5, 7, 11, 13, 17, 19]

上面的代码中,我们首先创建一个长度为n+1的数组arr,数组中的值全部设为true,表示所有数字都是质数。然后从2开始枚举,若当前数字为素数,则从它的平方开始,将后续所有该数的倍数都标记为非素数。最后,再遍历一遍数组arr,如果arr[i]为true,表示i是一个质数,就将其加入到结果数组中。

总结

以上,就是JavaScript判断数字是否为质数的两种方法,暴力枚举法和埃氏筛法。其中,暴力枚举法简单易懂,容易实现,但效率不高,适用于小规模数据的处理。而埃氏筛法虽然稍微有些复杂,但其时间复杂度为O(nloglogn),效率比较高,适用于大规模数据的处理。

希望通过本文的介绍,您对判断数字是否为质数的方法有了更加深入的了解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript判断数字是否为质数的方法汇总 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQWidgets jqxValidator animationDuration属性

    jQWidgets jqxValidator 动画时长(animationDuration)属性详解 在一个表单验证工具中,动画特效可以提高用户体验。jQWidgets jqxValidator组件允许应用动画特效来引导用户向正确的输入方式迭代。animationDuration属性就是控制这些动画特效的时间。 属性介绍 属性名称 animationDura…

    jquery 2023年5月12日
    00
  • jQWidgets jqxComboBox updateItem()方法

    以下是关于“jQWidgets jqxComboBox updateItem() 方法”的完整攻略,包含两个示例说明: 简介 jqxComboBox 控件提供了 updateItem() 方法,该方法用于更新下拉列表中指定选项的文本和值。通过使用 updateItem() 方法,可以在代码中动态更新下拉列表中指定选项文本和值。 详细攻略 以下是 jqxCom…

    jquery 2023年5月11日
    00
  • jQuery Ajax 实例代码 ($.ajax、$.post、$.get)

    当需要在网页上进行异步请求时,可以使用jQuery提供的Ajax方法,其中包括了$.ajax、$.post、$.get等方法。下面我们来详细讲解这几个方法的使用。 $.ajax方法 $.ajax方法中有很多参数,但只有这三个是必需的: url:请求的URL地址。 type:请求方式,可以是GET或POST。 dataType:服务器返回的数据类型,可以是JS…

    jquery 2023年5月27日
    00
  • jQuery Mobile面板 classes.pagePanelOpen选项

    jQuery Mobile是一款基于jQuery的框架,使得开发人员可以更简单高效地开发用于移动设备的web应用程序。其中,面板(panel)是其提供的一种重要的组件,可以用于实现左右切换的侧边栏。在使用面板组件时,有一个非常重要的选项就是classes.pagePanelOpen,本文将详细讲解该选项的用法和特性。 classes.pagePanelOpe…

    jquery 2023年5月12日
    00
  • 基于jquery的气泡提示效果

    关于“基于jquery的气泡提示效果”,我向您介绍下面的攻略: 理解气泡提示的基本概念 气泡提示是指在网页制作中,常常出现的一种使用方式,是一种非常自然的交互形式。通常也被称为Popover,Tooltip等。基本特点是通过鼠标悬停或点击等操作,弹出包含标文、图片或网页元素等内容的气泡提示框,以达到更好的用户体验和更精确的交互提示信息。 思路与实现 在进行“…

    jquery 2023年5月28日
    00
  • 关于JS数据类型检测的多种方式总结

    下面详细讲解“关于JS数据类型检测的多种方式总结”的完整攻略: 1. 为什么需要数据类型检测 在JS中,不同的数据类型有不同的特征和用途,因此在编写程序的时候,我们需要确保我们所操作的数据变量的类型是正确的,以避免产生意外结果。例如,如果我们把一个字符串类型的变量当作数字类型来进行计算,那么就可能会产生错误的结果。 因此,在JS中,我们需要对数据类型进行检测…

    jquery 2023年5月28日
    00
  • jQWidgets jqxBarcode lineWidth 属性

    jQWidgets jqxBarcode lineWidth 属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI件和工具,包括表格、图表表单、历、菜单等。其中,jqxBarcode是jQWidgets中的一个组件,可以用于生成各种类型的条码。jqxBarcode提供了lineWidth属性用于设置条形码的线条宽度。 lineWidt…

    jquery 2023年5月9日
    00
  • JavaScript该如何学习 怎样轻松学习JavaScript

    JavaScript该如何学习:完整攻略 JavaScript是一门用于前端开发的高级编程语言,随着互联网的飞速发展,JavaScript的重要性也越来越突出。很多人想要学习JavaScript,但是并不知道从何入手。本文将为大家提供一些简单易懂的方法和规划,帮助初学者快速上手。 一、学习路线 学习JavaScript,最重要的是确定学习路线和计划,根据个人…

    jquery 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部