Post

알고리즘_약수 구하기

약수?

어떤 수를 나누어떨어지게 하는 수

1.단순하게 약수 구하는 방법

1부터 약수의 크기까지 반복해서 돌면서 나누어 떨어지는 수 구하기

1
2
3
4
5
6
7
const getDivisors = (num) => {
  const divisors = [];
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) divisors.push(i);
  }
  return divisors;
};
  • 1부터 특정 숫자까지의 약수 구하기
1
2
3
4
5
6
for (let i = 1; i <= number; i++) {
  const divisors = [];
  for (let j = 1; j <= i; j++) {
    if (i % j === 0) divisors.push(j);
  }
}

2.주어진 수의 절반을 대상으로만 확인하기

약수는 본인을 제외하고 n/2 보다 클 수 없기 때문에 절반값까지만 체크

자기 자신은 빠져있기 때문에, 마지막에 자기 자신 추가하기

1
2
3
4
5
6
7
const getDivisors = (num) => {
  const divisors = [];
  for (let i = 1; i <= num / 2; i++) {
    if (num % i === 0) divisors.push(i);
  }
  return [...divisors, num];
};
  • 1부터 특정 숫자까지의 약수 구하기
1
2
3
4
5
6
7
8
9
for (let i = 1; i <= number; i++) {
  const divisors = [];
  for (let j = 1; j <= i / 2; j++) {
    if (i % j === 0) {
      divisors.push(j);
    }
    divisors.push(i);
  }
}

3.제곱근 사용하기

약수를 가지고 입력받은 값을 나누게 될 경우 나오는 결과 값 역시 약수이기 때문

1
2
3
4
5
6
7
8
9
10
11
const getDivisors = (num) => {
  const divisors = [];
  for (let i = 1; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      divisors.push(i);
      if (num / i != i) divisors.push(num / i);
    }
  }

  return divisors;
};

■ 예시 (100의 약수 구하기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const getDivisors = (num) => {
  const divisors = [];
  for (let i = 1; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      divisors.push(i);
      if (num / i != i) divisors.push(num / i);
      console.log(num + "/" + i + "=" + num / i);
      // 100 / 1 = 100
      // 100 / 2 = 50
      // 100 / 4 = 25
      // 100 / 5 = 20
      // 100 / 10 = 10
    }
  }

  return divisors;
};
getDivisors(100);
// [1, 2, 4, 5, 10, 20, 25, 50, 100]

■ 예시 (36의 약수 구하기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const getDivisors = (num) => {
  const divisors = [];
  for (let i = 1; i <= Math.sqrt(num); i++) {
    if (num % i === 0) {
      divisors.push(i);
      if (num / i != i) divisors.push(num / i);
      console.log(num + "/" + i + "=" + num / i);
      //   36 / 1 = 36
      //   36 / 2 = 18
      //   36 / 3 = 12
      //   36 / 4 = 9
      //   36 / 6 = 6
      //   36 / 1 = 36
      //   36 / 2 = 18
      //   36 / 3 = 12
      //   36 / 4 = 9
      //   36 / 6 = 6
    }
  }

  return divisors;
};
getDivisors(36);
// [ 1, 36, 2, 18, 3, 12, 4, 9,  6 ]

참고 사이트

This post is licensed under CC BY 4.0 by the author.