반응형
콜라츠 추측 (Collatz conjecture)
자연수 n에 대해
n이 짝수면 반으로 나누고
n이 홀수면 3배에 1을 더하는 것을 반복하다보면
결국에 1이 된다는 문제
$$ f(n) = \left\{\begin{matrix}
\frac{n}{2}, & \rm if ~ \it n ~ \rm is ~ even \\
3n + 1, & \rm if ~\it n ~\rm is ~odd
\end{matrix}\right. $$
정말 1이 되는지 VBA를 이용해서 확인해보자.
우선 시트에 다음과 같이 입력하고
실행버튼의 이름은 Collatz로 지정했다.
그리고 실행버튼에 다음 코드를 연결해준 후 실행하면
Sub Collatz_Click()
Dim i As Long, num As Long
[B6:C1048576] = ""
num = [C4]
Do While num > 1
i = i + 1
If num Mod 2 = 0 Then
num = num / 2
Else
num = 3 * num + 1
End If
Cells(i + 5, 2) = i
Cells(i + 5, 3) = num
Loop
End Sub
다음과 같은 결과를 얻을 수 있다.
C4 Cell에 아무 자연수나 넣어도 결국 1이 된다.
아무 자연수... 라고 했지만 너무 큰 숫자를 넣으면
오버플로 에러가 발생하므로 적당히... 넣자.
반응형
'Excel VBA 응용' 카테고리의 다른 글
Factorial 계산하기 (0) | 2023.12.03 |
---|---|
Plot Digitizer (0) | 2023.12.02 |
TSP (Traveling Salesman Problem) (0) | 2023.11.30 |
Stop Watch (0) | 2023.11.29 |
소인수분해 (0) | 2023.11.29 |