问题背景:需要找出这样一个整数:找出它所有的因数,把每个因数都平方,再求和,最后的和是一个平方数。
具体实例里,找出的是两个数之间的这样的数,最后结果以二重数组显示:
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;
}
这个程序算是一遍对的,其实考虑的是逻辑思维,写程序的过程中,把每一步的问题想清楚,其实很容易出结果的。下次希望自己能写得更快些,别磨蹭。
程序就是这样,只要你能找到规律的东西,无论多复杂,它都能快速给你一个结果。