题目:将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。
想要分解质因数,我们需要知道什么是质数,什么是质因数。

质数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
质因数:质因数就是一个数的约数,并且是质数。比如8=2×2×2,2就是8的质因数。12=2×2×3,2和3就是12的质因数。

通常我们会使用短除法:

如上,分解90我们得到的就是90=2 * 45 = 2 * 3 * 15 = 2 * 3 * 3 * 5

1.首先写一个函数判断是否为质数:

     function isPrime(num){//如果输入的数为1,返回falseif(num == 1){return false}//从2开始判断是否为质数for(var i=2;i<num;i++){//如果取余等于0,说明能除尽if(num%i==0){//返回falsereturn false}}//否则返回truereturn true}

2.判断是否为质数后,找出这个数的所有质因数,并且放在一个数组里面,方便后面取用。

     function ArrFactor(num){//创建一个空数组var arr=[]//从1开始到这个数,找出所有质因数for(var i=1;i<=num;i++){//取余==0并且调用1的函数判断是否同时为质数if(num%i==0 && isPrime(i)){//是就添加进数组arr.push(i)}}//返回数组arrreturn arr}

3.调用以及打印

        function showNum(num){//思想:num除以最小质因数 除剩下的数继续除以最小质因数一直到没有除了1和它本身以外的其他质因数,结果就为最小质因数和最后除剩下的数的乘积//定义一个变量接收函数ArrFactor()的值var arr=ArrFactor(num)//定义变量remain存储每次除剩下的值,初始为它自身var remain=num//定义格式:  这个数 =var str=num+'='//定义一个旗子var flag=truewhile(flag){for(var j=0;j<arr.length;j++){//如果remain与某个数取余为0if(remain%arr[j]==0){//将这个数加入str存储str+=arr[j]+'*'//获得remain除了之后的值并赋值给remainremain /=arr[j]break}}//通过循环判断终止时刻for(var i=0;i<arr.length;i++){//如果除下来的数与此时要使用的因数相等,把此因数加入str后终止循环//如 9=3*3 底数与因数相等,结束循环if(remain==arr[i]){str+=arr[i]flag=falsebreak}}}console.log(str);}showNum(90)

至此,封装分解质因数的函数就完成了,如上调用函数分解90的结果为:

整理,完整代码如下:

     function isPrime(num){//如果输入的数为1,返回falseif(num == 1){return false}//从2开始判断是否为质数for(var i=2;i<num;i++){//如果取余等于0,说明能除尽if(num%i==0){//返回falsereturn false}}//否则返回truereturn true}//找出这个数的所有质因数,放在一个数组里面function ArrFactor(num){//创建一个空数组var arr=[]//从1开始到这个数,找出所有质因数for(var i=1;i<=num;i++){//取余==0并且调用1的函数判断是否同时为质数if(num%i==0 && isPrime(i)){//是就添加进数组arr.push(i)}}//返回数组arrreturn arr}//打印function showNum(num){//思想:num除以最小质因数 除剩下的数继续除以最小质因数一直到没有除了1和它本身以外的其他质因数,结果就为最小质因数和最后除剩下的数的乘积//定义一个变量接收函数ArrFactor()的值var arr=ArrFactor(num)//定义变量remain存储每次除剩下的值,初始为它自身var remain=num//定义格式:  这个数 =var str=num+'='//定义一个旗子var flag=truewhile(flag){for(var j=0;j<arr.length;j++){//如果remain与某个数取余为0if(remain%arr[j]==0){//将这个数加入str存储str+=arr[j]+'*'//获得remain除了之后的值并赋值给remainremain /=arr[j]break}}//通过循环判断终止时刻for(var i=0;i<arr.length;i++){//如果除下来的数与此时要使用的因数相等,把此因数加入str后终止循环//如 9=3*3 底数与因数相等,结束循环if(remain==arr[i]){str+=arr[i]flag=falsebreak}}}console.log(str);}showNum(90)

js实例之分解质因数相关推荐

  1. c语言分解质因数的设计思路,C语言开发中分解质因数的操作实例

    C语言的开发在日常开发中被广泛使用,而我们都知道C语言是简单的编译方法,爱站技术频道小编今天就为大家带来了C语言开发中分解质因数的操作实例,一起去进入下文看看吧! 首先来看一个最简单的C语言实现质因数 ...

  2. JavaScript算法(实例四)分解质因数 / 四舍五入 / 阶乘之和

    1.分解质因数在数学领域的意思是:任何一个合数都可以写成几个质数相乘的形式.其中每个质数都是这个合数的因数,叫做这个合数的分解质因数.分解质因数只针对合数.(例如:12=2x2x3). functio ...

  3. php整形数组求里面的质数,PHP实现的分解质因数操作示例

    本文实例讲述了PHP实现的分解质因数操作.分享给大家供大家参考,具体如下: 思路: 如果要计算$num的质数,则至少收集$num以内的质数数组,判断$num是否在质数数组里: 如果否,则判断当前质数$ ...

  4. 将一个正整数分解质因数。例如:输入90,打印出90=233*5

    对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可. (2)但n能被k整除,则 ...

  5. C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客

    题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个 ...

  6. 阶乘分解质因数[经典题组合数学枚举质因子]

    引入问题: 给定整数NNN,试把阶乘 N!N!N! 分解质因数,按照算术基本定理的形式输出分解结果中的 pip_ipi​ 和 cic_ici​即可. N!N!N!分解质因数后的结果,共若干行,每行一对 ...

  7. 【数学专题】 筛质数、分解质因数和快速幂

    筛质数 质数筛法分为埃氏筛和线性筛. 埃氏筛没有线性筛时间复杂度好,不常用,但是他的时间复杂度分析方法却比较常用. 埃氏筛的时间复杂度为O(nloglogn)≈O(n)O(nloglogn)≈O(n) ...

  8. 【c语言】分解质因数

    将一个正整数N(1<N<32768)分解质因数.例如,输入90,打印出90=233*5. 样例输入 66 样例输出 66=2311 #include <stdio.h> int ...

  9. java求最大公约数(分解质因数)

    下面是四种用java语言编程实现的求最大公约数的方法: package gcd;import java.util.ArrayList; import java.util.List;public cla ...

最新文章

  1. 3星|《数据思维:从数据分析到商业价值》:有趣的数据分析案例
  2. 【图像】imagededup照片去重(感知哈希,汉明距离)
  3. 移植 uC/OS-III 到 STM32
  4. 【斜率优化】玩具装箱(luogu 3195)
  5. ztree 标准得json数据格式_酷站推荐 - json-c.github.io/json-c - json-c API
  6. hdoj1789:Doing Homework again (贪心)
  7. 22-win10下ElasticSearch.6.1.0与logstash6.1.0的整合
  8. ubuntu 搜索推荐安装的NVIDIA驱动版本
  9. 自动驾驶红旗车,背后站着小马哥
  10. .NET图像处理包 DotImage
  11. linux dup用法,Linux:dup和dup2文件描述符及函数解析,dupdup2
  12. 低危漏洞- X-Frame-Options Header未配置
  13. MDIO总线简单介绍
  14. 微信小程序创建过程(具体步骤)
  15. 两向量点乘坐标运算_向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读...
  16. css两列等高,css多列等高布局
  17. 思科3650交换机的密码恢复
  18. 如何避免装修风格跑偏
  19. median函数 oracle9i,oracle10g学习笔记
  20. 桌面图标文件不能拖动的解决方法

热门文章

  1. TensorFlow常用激活函数及其特点用法(6种)详解
  2. 打印机驱动无法安装到计算机是,打印机驱动在电脑哪个位置 打印机驱动安装不上怎么办【详解】...
  3. 让你的「文件传输助手」歇一歇吧,你完全有更实用的备忘录工具选择
  4. 宽带服务器无响应678,宽带连接错误678解决方法
  5. mysql查询出的数据转换为数字,关于sql:在MySQL查询中将文本转换为数字
  6. IP远程实施访问另一台电脑
  7. 泰山杯练习平台部分题目wp
  8. ubuntu QQ安装 网易云音乐 rar文件 截屏软件Shutter 图片编辑pinta 文字软件typora 视频播放器smplayer
  9. ip解析经纬度,基站定位经纬度,用就完事了
  10. 研究生计算机方面有哪些专业,计算机类研究生有哪些专业?