题目

找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。

范围是两个数字构成的数组,两个数字不一定按数字顺序排序。

例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小公倍数。

测试用例

  • smallestCommons([1, 5]) 应该返回一个数字。
  • smallestCommons([1, 5]) 应该返回 60。
  • smallestCommons([5, 1]) 应该返回 60。
  • smallestCommons([1, 13]) 应该返回 360360。

分析思路

最小公倍数 = 两数相乘 / 最大公约数; 
所以第一步是求两数的最大公约数。

代码

1.function greatestCommonDivisor(num1, num2) {
2. var retVal = 1;
3.
4. for (var i = 2; i <= Math.min(num1, num2); i++) {
5. if (num1 % i === 0 && num2 % i === 0) {
6. retVal = i;
7. }
8. }
9. return retVal;
10.}
11.
12.function smallestCommons(arr) {
13. var retVal = 1;
14.
15. for (var i = Math.min(arr[0], arr[1]); i <= Math.max(arr[0], arr[1]); i++) {
16. retVal = Math.floor(retVal * i / greatestCommonDivisor(retVal, i));
17. }
18.
19. return retVal;
20.}
21.
22.smallestCommons([1,5]);
在网上搜到一段经典的最大公倍数的版本:

注意: 
这里涉及到经典算法:求最大公约数gcd(greatest common divisor)和最小公倍数scm(smallest common multiple) 
gcd(最大公约数)算法过程(欧几里德算法/辗转相除法) 
有两整数a和b: 
① a%b得余数c,即c=a%b 
② 若c=0,则b即为两数的最大公约数 
③ 若c≠0,则a=b,b=c,再回去执行① 
scm算法(最小公倍数算法) 
最小公倍数=两整数的乘积÷最大公约数,即scm=sqrt(a*b)/gcd(a,b)

1.//求val1和val2的最大公约数(greatest common divisor)
2.//欧几里德算法(辗转相除法)
3.function gcd(val1,val2){
4. if(val1%val2===0)
5. return val2;
6. else
7. return gcd(val2,val1%val2);
8.}
9.
10.function smallestCommons(arr) {
11. //将arr按升序排序
12. arr=arr.sort(function(a,b){
13. return a-b;
14. });
15. //求a和b的最小公倍数scm(smallest common multiple)
16. //scm=abs(a*b)/gcd(a,b)
17. var val=arr[0];
18. //这里求多个数的最小公倍数:先求出两个数的scm1,再求scm1与第三个数的scm2……依次循环
19. for(var i=arr[0]+1;i<=arr[1];i++){
20. val *=i/gcd(val,i);
21. }
22. return val;
23.}
24.
25.smallestCommons([1,5]);

[Intermediate Algorithm] - Smallest Common Multiple的更多相关文章

  1. Smallest Common Multiple

    FCC题目:找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 -- 找出能被 1 和 3 和它们之间所有数字整除 ...

  2. js-FCC算法Smallest Common Multiple。找出两个参数和它们之间的连续数字的最小公倍数。

    存档. 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. function smallestCommons(arr) { //分解质因数法,分解为若干个质数相乘 var arrratio=[ ...

  3. Smallest Common Multiple FreeCodeCamp

    题目:找出能被两个给定参数和它们之间的连续数字整除的最小公倍数.  范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 分析:首先题目的意思求一个连续数列的所有数字的最小公倍数,这连续的数字序列 ...

  4. Smallest Common Multiple-freecodecamp算法题目

    Smallest Common Multiple 1.要求 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 2.思路 设定一个twoMultiple(a,b)函数,求出输入两个参数的最小公 ...

  5. hdu1019 Least Common Multiple

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  6. ACM-简单题之Least Common Multiple——hdu1019

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  7. zoj1797 Least Common Multiple 最小公倍数

    Least Common Multiple Time Limit: 2 Seconds      Memory Limit: 65536 KB The least common multiple (L ...

  8. hdu_1019Least Common Multiple(最小公倍数)

    太简单了...题目都不想贴了 //算n个数的最小公倍数 #include<cstdio> #include<cstring> #include<algorithm> ...

  9. 杭电1019Least Common Multiple

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1019 题目: Problem Description The least common multiple ...

随机推荐

  1. 【3】Django创建第一个项目

    天地所以能长且久者,以其不自生,故能长生. --老子<道德经> 写在前面:Django在学习的过程中,我们会参考官方文档,从两部分进行讲解,第一部分主要是一个入门项目的搭建开发,第二部分是 ...

  2. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能.        幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复 ...

  3. 和socket、rs232通信遇到的糟糕问题。备查!

    procedure Tfrm_FoldingCloth.btn1Click(Sender: TObject); var SND:array of byte; begin if Not cnrs232. ...

  4. [Javascript Crocks] Flatten Nested Maybes with `chain`

    Sometimes, we run into situations where we end up with a Maybe within the context of another Maybe. ...

  5. [Angular] Advanced DI

    In this post, we are going to see how to solve one design pattern challenge. The challenge is what w ...

  6. 开源 免费 java CMS - FreeCMS2.0 会员password设置

    项目地址:http://www.freeteam.cn/ password设置 从右側管理菜单点击password设置进入.   输入正确的当前password和新password后点击改动就可以.

  7. RecyclerView的使用(1)之HelloWorld

    原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50670657 RecyclerView是伴随Android 5.0公布的新控件, ...

  8. Cocos2d-X直接使用OpenGL接口

    Cocos2d-X是基于基于OpenGL ES的2D游戏引擎,所以Cocos2d-X能够直接使用OpenGL接口 首先建立一个Draw类,用于处理OpenGL接口 在Draw.h中加入以下的代码 #i ...

  9. 计算工作日之后N天的日期

    1.假期实体类: package com.smics.date; import java.io.Serializable; import java.util.Date; public class Va ...

  10. '无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称' 或 'vue不是内部或外部命令' 的解决方法

    如果在使用 vue 初始化项目的时候提示: vue : 无法将“vue”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. 或者: ...