2015-10-19 57 views
0

使用Table Method找到所提供的参数的最小公倍数,它们可以被两者均匀分开,也可以通过这些参数之间的范围内的所有连续数字来求出。只有两个参数。对于例[1,3],找到1,2,3的lcm。使用表格方法查找最小公倍数

注意 - 它可以创建一个无限循环

function smallestCommons(arr) { 

    var nums = []; 
    var multiples = []; 
    if(arr[0]>arr[1]) { 
    var bigger = arr[0]; 
    } else { 
    var bigger = arr[1]; 
    } 

    for(var i=bigger;i>0;i--) { 
    nums.push(i); 
    console.log(i); 
    }console.log(nums + " nums"); 

    var sums = 0; 

    while(sums != nums.length) { 
    for(var k=0;k<nums.length;k++) { 
     if(nums[k] % 2 === 0) { 
     nums[k] = nums[k]/2; 
     multiples.push(2); 
     } else if(nums[k] % 3 === 0) { 
     nums[k] = nums[k]/3; 
     multiples.push(3); 
     }else if(nums[k] % 5 === 0) { 
     nums[k] = nums[k]/5; 
     multiples.push(5); 
     }else if(nums[k] % 7 === 0) { 
     nums[k] = nums[k]/7; 
     multiples.push(7); 
     }else if(nums[k] === 1) { 
     break; 
     }else { 
     nums[k] = nums[k]/nums[k]; 
     multiples.push(nums[k]); 
     } 
    } 
    for(var j = bigger; j>0;j--) { 
    sums = sums + nums[j]; 
    } 
    } 
var scm = [multiples].reduce(function(a,b){console.log(a*b)}); return scm 
} 
smallestCommons([1,5]); 
+0

是什么你的实际需求? –

+0

我希望它首先将数字除以最小的素数(2),如果均匀可分割将其推到倍数,如果不是,则移动到下一个素数,等等......最后,将倍数与自身相乘并由此得出答案(lcm) – Lavios

+0

nums [k] = nums [k]/nums [k];这条线给你什么? –

回答

1

我发现这是一个简单的解决方案,它可以创造奇迹;

  • 循环遍历所有可能的数字,与下界输入(变量I)
  • 为每一个数字,通过和包括输入范围(VAR j)的
  • 之间的每一个数量的测试整除开始,如果我满足所有条件返回它的答案,否则增加1我再试一次

click here for explanation of ? operator in variable initialization

function smallestCommons(arr) { 


    //set variables for upper and lower bounds 
    //incase they aren't entered in ascending order 
    var big = arr[0] < arr[1] ? arr[1]:arr[0], 
     small = arr[0] < arr[1] ? arr[0]:arr[1], 
     i = small; 

    //loop through all numbers, note the possibility of an infinite loop 
    while(true){ 


     //test each number for divisibility by by both upper and lower 
     //bounds, as well as by all sequential numbers inbetween 
     for(var j = small; j <= big; j++){ 

     if(i % j === 0){ 
      if(j===big){ 
      return i; 
      } 
     }else { 
      break; 
     } 
     } 
    i++; 
    } 
} 


smallestCommons([1,5]); //60 
相关问题