题目

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

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

例如对 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. Java常量池详细说明

    java常量池技术  java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间.常量池 ...

  2. 利用echarts做图表统计

    以项目中的扇形统计图为例: 首先,第一步: 引入外部echarts.js文件 其次,第二步: HTML代码块 <div class="count-body-con count-tj&q ...

  3. hdu 3352 求边双联通分量模板题(容器)

    /*这道题是没有重边的,求加几条边构成双联通,求边联通分量,先求出桥然后缩点,成一个棵树 找叶子节点的个数*/ #include<stdio.h> #include<string.h ...

  4. 用JAVA的抽象类实现编码组合进度的灵活性

    都是实际开发逼出来的吧. 人类真灵活~~~~:) 就是将整个功能的实现在编程时,打散到一个一个文件中,提前写好核心算法, 在TEAM的实现方案确定下来之后,再进行组装. GuessGame.java ...

  5. ZOJ 1450

    最小圆覆盖 #include <iostream> #include <algorithm> #include <cstdio> #include <cmat ...

  6. Python 字符串 String 内建函数大全(1)

    关于 Python 的字符串处理相关的方法还是许多的.因为我正在学习 Python,于是就把 Python 中这些混杂的用于 string 的函数总结出来,在自己忘记的时候便于查找,希望对于有相似需求 ...

  7. [寒江孤叶丶的Cocos2d-x之旅_32]微信输入框风格的IOS平台的EditBox

    原创文章,欢迎转载.转载请注明:文章来自[寒江孤叶丶的Cocos2d-x之旅系列] 博客地址:http://blog.csdn.net/qq446569365 偶然看到一个游戏注冊账号时候,输入框是弹 ...

  8. TestNG升级

    TestNG 6.5.1 or above is required,please update your TestNG or uncheck 'Use project TestNG jar' from ...

  9. ios业务模块间互相跳转的解耦方案

    *此文章需有一点runtime的知识,假设你不了解runtime,<高速理解Runtime of Objective-C>: http://mp.weixin.qq.com/s?__biz ...

  10. elasticsearch插件开发

    检索引擎Elasticsearch支持插件模式.有些时候你可能须要安装一些插件.甚至自己开发插件,这里就提供一个開始ES插件开发演示样例,ES版本号为1.5.2. 一.插件类继承自org.elasti ...