Javascript 我如何创建一个for循环,该循环递增一个数字,直到找到一个';s的余数是0?

Javascript 我如何创建一个for循环,该循环递增一个数字,直到找到一个';s的余数是0?,javascript,algorithm,for-loop,Javascript,Algorithm,For Loop,我有一个函数,它应该找到所提供的参数的最小公倍数,可以被这两个参数加上它们之间的参数平分 数组总是由两个数字组成,不能按数字顺序排列 比如说。[1,3]的值将返回6,或者[1,5]的值将是60 我知道首先我需要找到数组中的最小数和最大数 然后我必须把最小值和最大值范围内的所有数字,包括它们都放入一个数组中 然后我需要以某种方式创建一个for循环,它递增一个数字,直到它找到一个余数为0的循环,当它除以数组中的每个数字时 第三部分我理解,但不知道如何实施。任何帮助和提示都将不胜感激 这是我目前的代码

我有一个函数,它应该找到所提供的参数的最小公倍数,可以被这两个参数加上它们之间的参数平分

数组总是由两个数字组成,不能按数字顺序排列

比如说。
[1,3]
的值将返回6,或者
[1,5]
的值将是60

  • 我知道首先我需要找到数组中的最小数和最大数
  • 然后我必须把最小值和最大值范围内的所有数字,包括它们都放入一个数组中
  • 然后我需要以某种方式创建一个for循环,它递增一个数字,直到它找到一个余数为0的循环,当它除以数组中的每个数字时
  • 第三部分我理解,但不知道如何实施。任何帮助和提示都将不胜感激

    这是我目前的代码:

    function smallestCommons(arr) {
      let minNum = Math.min(...arr);
      let maxNum = Math.max(...arr);
      let mySeq = [];
      for(let i = minNum; i <= maxNum; i++){
        mySeq.push(i);
      }
      // stuck here
    }
    
    function smallestCommons(arr){
    设minNum=Math.min(…arr);
    设maxNum=Math.max(…arr);
    让mySeq=[];
    
    基于你的想法,我可以创建这样一个函数

    function smallestCommons(arr) {
      let minNum = Math.min(...arr);
      let maxNum = Math.max(...arr);
      let mySeq = [];
      for(let i = minNum; i <= maxNum; i++){
        mySeq.push(i);
      }
      // stuck here
      let smallestCommon = maxNum;
      let found = false;
      while(!found){
        var j;
        for(j = 0; j< mySeq.length; j++){
          if(smallestCommon % mySeq[j] != 0) break;
        }
        if(j == mySeq.length){
          found = true;
        }else{
          smallestCommon ++;
        }
      }
    
      return smallestCommon;
    }
    
    smallestCommons([1, 3]) //return 6
    smallestCommons([1, 5]) //return 60
    
    function smallestCommons(arr){
    设minNum=Math.min(…arr);
    设maxNum=Math.max(…arr);
    让mySeq=[];
    
    对于(让i=minNum;i因为我不是JS人,所以我可以给你伪代码

    lcm = 1
    list =[1,2,3]
    
    for i in len(list)-1:
       lcm = lcm*list[i+1]/gcd(lcm,list[i+1])
    
    print(lcm)
    
    如果我们需要找到从1到n的数字的lcm


    否则,我们需要使用列表的前两个数字初始化lcm。

    一种功能方法

    常数范围=([min,max])=>{
    设arr=[];
    对于(VarI=min;i!b?a:gcd(b,a%b);
    常数lcm=(a,b)=>(a*b)/gcd(a,b);
    const smallestCommons=(arr)=>范围(arr).reduce((acc,cur)=>acc=lcm(acc,cur),arr[0]);
    log(smallestCommons([1,3]);//6
    
    log(smallestCommons([1,6]);/60
    嘿,这是适用于您的场景的代码

            let array = [1,5];
    
            let returnValFunction = (arr) => {
                try {
                    let minNum = Math.min(...arr);
                    let maxNum = Math.max(...arr);
                    let returnVal = false;
                    let i = 1;
                    while (!returnVal) {
                        let divingNum = maxNum * i;
                        let checkVal = true;
                        for (let a = maxNum; a >= minNum; a--) {
                            console.log('a', a);
                            console.log(Number.isInteger(divingNum / a));
                            !Number.isInteger(divingNum / a) ? checkVal = false : '';
                        }
                        if (checkVal) returnVal = divingNum;            
                        i++;
                    };
                    return returnVal;
                } catch(err) {
                    console.log(err);
                }
            }
    
            let consoleValue = returnValFunction(array);
            console.log('consoleValue', consoleValue);
    

    这是一个需要解决的相互矛盾的问题。我这样解决了它,但我相信还有更好的办法

    我首先计算了两个最大数字之间的lmc

    然后,我比较这个数乘以1,然后乘以2,然后乘以3,依此类推,对下一个最低的数(最大数-2)进行模运算,直到结果为0。我继续计算模运算(最大数-3),直到(最大数-n)=arr[0]

    功能lcm(nb1、nb2)
    {
    设i=1;
    设j=1;
    while(true)
    {
    对于(j=1;j 2)
    {
    设biggestCommon=lcm(arr[1]-1,arr[1]);
    设mul=1;
    for(让num=biggestNumber-2;num>arr[0];--num)
    而(((最大公共*mul)%num)!=0)
    ++mul;
    返回(最大公共*mul);
    }
    其他的
    返回(最大编号);
    }
    }
    log(smallestCommons([1,5]);
    log(smallestCommons([1,3]);
    log(smallestCommons([1,42]);
    log(smallestCommons([7,10]);
    
    console.log(smallestCommons([4,5]);
    如何才能
    [1,3]
    返回6?最小的公倍数是1。
    [1,5]
    和60@Cid因为[1,3]表示1、2和3的lcm。类似地,[1,5]是1、2、3、4和5。实际上,您需要找到lcm,这将很难做到。为什么您不能找到gcd并使用属性lcm*hcf=num1*num2,这样您就可以找到[1,n]表示的范围内数字的lcm你创建了一个介于最小值和最大值之间的数字数组…在我看来,这没有用。创建一个循环,在其中收集所有倍数,最大值为minum*max(保证较低或此数字)。然后检查这两个数组的相同数据,得到最小的数字。谢谢@MadaraUchiha看起来我的数学真的很烂,我不知道两个数字的lcm