//

作者:lofayo    发布于:

问题背景:需要找出这样一个整数:找出它所有的因数,把每个因数都平方,再求和,最后的和是一个平方数。

具体实例里,找出的是两个数之间的这样的数,最后结果以二重数组显示:

listSquared(1,250);
[[1, 1], [42, 2500], [246, 84100]]

// 得到一个正整数所有的正因数
function allDivisors(n) {
    var result = [];
    for (var i = 1; i <= n; i++) {
        if (n % i == 0) {
            result.push(i);
        }
    }
    return result;
}

function listSquared(m, n) {
    // your code
    var result = [];
    for (var i = m; i <= n; i++) {
        var divisorsSquaredSum = allDivisors(i).map(function(n) {
          return n*n;
        }).reduce(function(sum,curValue){
          return sum += curValue;
        })

        if (Number.isInteger(Math.sqrt(divisorsSquaredSum))) {
            var curArr = [];
            curArr.push(i, divisorsSquaredSum);

            result.push(curArr);
        }

    }
    return result;
}

这个程序算是一遍对的,其实考虑的是逻辑思维,写程序的过程中,把每一步的问题想清楚,其实很容易出结果的。下次希望自己能写得更快些,别磨蹭。

程序就是这样,只要你能找到规律的东西,无论多复杂,它都能快速给你一个结果。

format_list_numbered

(无)

vertical_align_top

Copyright © 2017 每天寻求一点变化

Powered by Hexo & Theme - Vateral