用表法求最小公倍数

Finding Least Common Multiple using Table Method

本文关键字:最小公倍数      更新时间:2023-09-26

使用表法找到所提供参数的最小公倍数,该倍数可以被这两个参数以及这些参数之间范围内的所有序号平均整除。只有两个参数。对于ex[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]);

我发现这是一个简单的解决方案,它的工作奇迹;

  • 循环所有可能的数字,从下限输入(var i)开始
  • 对于每个数字,在输入边界(var j)之间测试每个数字的可除性
  • 如果i满足所有条件,将其作为答案返回,否则将i增加1并重试

点击这里查看?变量初始化操作符

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

你需要的是找到范围(n, m)内的LCM ?

用质因数分解找到最小公倍数似乎更好。你可以用勒让德公式找出n的所有质因数!和米!,然后做一个简单的减法