約数と加算

5668 ワード

問題の説明


パラメータは2つの整数leftとrightです.左から右までのすべての数でsolution関数を完了し、約数の個数に偶数因数を加え、約数の個数に奇数因数を加えて減算数を返します.

せいげんじょうけん

  • 1 ≤ left ≤ right ≤ 1,000
  • I/O例


    leftrightresult131743242752

    I/O例説明


    I/O例#1
  • 次の表は、13から17までのすべての数字の合計数を示しています.
  • 獣薬獣薬の数131、132411、2、7、144151、3、5、154161、2、4、8、165171、172
    したがって、13+14+15-16+17=43を返さなければなりません.I/O例#2
  • 次の表は、24から27までのすべての数字の合計数を示しています.
  • 獣薬獣薬数241、2、3、4、6、8、12、248251、5、253261、2、13、264271、3、9、274
    したがって、24-25+26+27=52を返さなければなりません.

    私の答え

    function solution(left, right) {
        let sum = 0
        for(let i = left; i <= right; i++){
            let result = []
            for(let j = 1; j <=i; j ++){
                if(i % j === 0){
                    result.push(j)
                }
            }
            if(result.length % 2 === 0){
               sum +=  i 
            }else {
              sum -= i
            }
        }
        return sum
    }
    複文を回し,左から右の範囲の複文を,新たに宣言された空の配列に約数に対応する値を入れる.そして,その配列の長さが偶数か奇数かを条件として加算と減算を行った.

    他人を解く

    function solution(left, right) {
        var answer = 0;
        for (let i = left; i <= right; i++) {
            if (Number.isInteger(Math.sqrt(i))) {
                answer -= i;
            } else {
                answer += i;
            }
        }
        return answer;
    }
    この解法は薬水個数を求める関数を構築せず,Number.isInteger((Math.sqrt(i))を用いて問題を解決した.Number.isInteger()メソッドは、与えられた値が整数であるかどうかを決定します.
    使用される概念は、ある数の平方根が整数であれば、約数は奇数個であり、平方根でなければ、約数は偶数個である.