Excel VBA 응용

콜라츠 추측

kwangpal 2023. 11. 29. 20:23
반응형

콜라츠 추측 (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