function solution(n) {
let answer=0;
for (let i=1; i<=n; i++) {
// let tmp=[];
let sum=i;
let idx=i;
// tmp.push(idx);
while (sum<n) {
idx++;
sum += idx;
// tmp.push(idx);
}
if (sum===n) {
// console.log(tmp);
answer++;
}
}
return answer;
}
console.log(solution(20));
약수이고, 홀수면 answer++;
홀수의 경우 약수는 홀수밖에 안 나온다.
예를 들어 15의 약수는 1, 3, 5, 15를 활용해서 연속된 수의 합이 15가 되도록 나올 수 있음.
15=1+2+3+4+5 (중간값 3) 3x5 / 15=4+5+6 (중간값 5) 5x3 / 15=7+8 (연속된 수) 7+8 - 홀수인 경우 무조건 가능. / 15=15 / 중간값이 3인 경우, 중간값이 5인 경우, 연속된 수(7, 8), 15(n) 해서 4개인데, 이게 공교롭게 홀수의 약수 수와 같음.
그리고 짝수의 경우는 홀수의 연장선이라고 보면 됨. n=30인 경우, 30의 약수는 1, 2, 3, 5, 6, 10, 15, 30임. 30=4 + 5 + 6 + 7 + 8 (중간값 3의 연장) 2x3x5 / 30=9 + 10 + 11 (중간값 5의 연장) 2x5x3 / 30=6+7+8+9 (연속된 두 수의 연장) 2x(7+8) / 30=30 /
결과적으로 n의 홀수 약수 개수만 구해도 답이랑 같음.
다시 잘 생각해보면,
결국 합해서 15가 된다는 건 곱해서도 15가 될 수 있다는 거니까..??
function expressions(num) {
var answer = 0;
for(var i=1; i<=num; i++) {
if (num%i == 0 && i%2 == 1)
answer++
}
return answer;
}