任务说明:求给定数组arr所有元素的最小公倍数

算法一:短除法(效率较高,但算法相对复杂)

用短除法求最小公倍数的过程主要是找它们的因数,并且求出这些因数之积。而因数存在两种情况:某些数甚至全部数据共有的因数和独有的因数。而无论因数是共有的还是独有的,都只能作为一个因数,累乘一次。如:

2是arr[2、4、6]三个数共有的因数,则2只能算作一个因数,然后将除以2后所得的数据arr[1,2,3]继续找因数;2是数据2独有的因数,arr更新为arr[1,1,3];3是3独有的因数,最终arr为[1,1,1],而最小公倍数则是上述查找的3个因数2,2,3的累积12.可以看出所得的因数都为质数,且最终arr数组的元素都为1.

    这个算法比较难于利用简单的逻辑表达式来表示,这里可以借用一个标记来较好地解决问题。

javaScript实现算法如下:

//算法一:短除法求最小公倍数
function smallestCommonMultiple(arr){
//获取数组最大的数据,便于查找因数var maxNum=Math.max.apply(null,arr);
//标记,初始值为真,为假时表示不是arr中任何数的因数var flag=true;
//存放质因数var primefactor=[];
//存放累积var result=1;//从2到maxNum寻找数据的因数for(var i=2;i<=maxNum;i++){
//当某个i不是任一个数据的因数时flag为false,进入下一次外层循环时,需将flag重置为true,以便进入while循环flag=true;while(flag===true){//进入while循环,赋值falseflag=false;for(var key in arr){   //当某一项能被i整除,说明有独有或共有的因数i,将flag赋值true//并将对应项短除            if(arr[key]%i===0){flag=true;arr[key]=Math.floor(arr[key]/i);}}//flag为true,说明i为共有或独有因数if(flag===true){result *=i;primefactor.push(i);}}//arr得到更新,外层循环maxNum也相应得到更新maxNum=Math.max.apply(null,arr);}return "the least common multiple is"+result+"its prime factos :"+primefactor.join("*");
}

参考书目:《算法设计与分析》(第二版),吕国英 主编,清华大学出版社,2009.1

转载于:https://my.oschina.net/flyyourdream/blog/867209

JS求最小公倍数(高效算法1-短除法)相关推荐

  1. 多方隐私集合求交高效算法解读

    前言 之前我们介绍过两方的「隐私集合求交算法」,可以应用到计算广告的实际效果,寻找联系人,联邦学习的特征对齐等场景,例如:在新的APP上找到共同的微信好友.开会时找到所有参会者共同的空闲时间等,但是这 ...

  2. python求最小公倍数_python求最大公约数和最小公倍数的简单方法

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  3. 求最小公倍数的方法php,JS怎么求得最小公倍数和最大公约数

    这次给大家带来JS怎么求得最小公倍数和最大公约数,JS求得最小公倍数和最大公约数的注意事项有哪些,下面就是实战案例,一起来看一下. 方法来自求多个数最小公倍数的一种变换算法(详见附录说明) 最小公倍数 ...

  4. 离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

    需要在开头提前说明,本篇文章仅仅用于在学习初等数论或者离散数学时候对算术基本定理的理解,实际应用的时候把结论告诉大家,想求最大公约数就用欧几里得算法是最简单的,在本篇不再赘述,有机会我会在其他文章中说 ...

  5. 常见算法:C语言求最小公倍数和最大公约数三种算法

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  6. c语言中最小公倍数算法,常见算法:C语言求最小公倍数和最大公约数三种算法...

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  7. 求最小公倍数c语言最简公式,C语言求最小公倍数和最大公约数三种算法(经典)...

    把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们 ...

  8. c语言求最小公倍数和最大公约数三种算法

    C语言求最小公倍数和最大公约数三种算法(经典) 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b ...

  9. C语言求最小公倍数和最大公约数三种算法(经典)----ACM

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  10. 求最小公倍数与最大公因数的三种算法

    作者:Angel_Kitty 出处:http://www.cnblogs.com/ECJTUACM-873284962/ 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: ...

最新文章

  1. CUDA 7 Stream流简化并发性
  2. 一: 建立Vue sampleproject
  3. Hbase原理、基本概念、基本架构
  4. Nginx配置段(3)
  5. first level cache check - User parameter /UI2/CACHE_DISABLE
  6. python matplotlib画图遇到的问题——标题重叠问题
  7. python线程暂停_python3线程启动与停止
  8. vue父子组件的传值
  9. 如何学习自然语言处理(转)
  10. 读写分离MYSQL类
  11. 美图拟收购乐游科技附属公司约30%股份 后者为Warframe开发商
  12. 选择checkbox显示隐藏内容
  13. cmd/go: “package ... is not in GOROOT“问题解决办法
  14. Rancher通过Aliyun-slb服务对接阿里云SLB教程 1
  15. 如何用程序员的方式,营造七夕氛围感?
  16. X86 64位和32位
  17. Ubuntu 16.04安装ntopng流量监控软件
  18. 【源代码管理工具GIT】
  19. 80后不会有马云,马化腾,李彦宏这样的领军人物?
  20. 【NOIP模拟】德拉曼兹路基

热门文章

  1. js解决m3u8视频无法播放问题
  2. STM32CUBEIDE中修改FLASH起始地址的方法
  3. 深度强化学习(3):策略学习篇
  4. 2009年 上海证券交易所新一代交易系统有多牛逼
  5. Python 英文转中文
  6. 三只松鼠网络营销成功之路
  7. mp4怎么转换成mp3?
  8. 楚留香冰最新服务器,楚留香3.30更新公告 新增雕像功能
  9. mac上安装Enterprise Architect
  10. socket:read: Connection reset by peer