题目

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

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

例如对 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. php第四节课

    对象 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  2. c++ STL - priority_queue优先队列详解

    简述 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出 (first in, l ...

  3. 6.在idea中链接数据库

    1.打开数据库配置的窗口 File - view  - Tool Windows - Database 2.打开mysql的数据库链接模板 Database - + - Data Source - M ...

  4. 【ZOJ 4062】Plants vs. Zombies

    [链接] 我是链接,点我呀:) [题意] [题解] 二分最后的最大抵御值mid. 然后对于每个蘑菇. 都能算出来它要浇水几次mid/ai 然后如果第i个蘑菇没浇水达到要求次数. 就在i和i+1之间来回 ...

  5. JavaFX本地应用自己主动更新功能的实现FXLauncher

    JavaFX本地应用自己主动更新功能的实现--FXLauncher 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一. ...

  6. vue.js 父组件如何触发子组件中的方法

    组件 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊 ...

  7. 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包

    现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...

  8. Node.js:路由

    ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...

  9. thinkphp 具体常量,在view里面使用

    1 2 3 4 5 6 7 8 9 '__TMPL__'      =>  APP_TMPL_PATH,  // 项目模板目录 '__ROOT__'      =>  __ROOT__,  ...

  10. 【BZOJ1010】【HNOI2008】玩具装箱toy (斜率优化DP) 解题报告

    题目: 题目在这里 思路与做法: 这题不难想. 首先我们先推出一个普通的dp方程: \(f_i = min \{ f_j+(i-j-1+sum_i-sum_j-L)^2\}\) 然后就推一推式子了: ...