Excel VBA 응용

소인수분해

kwangpal 2023. 11. 29. 21:31
반응형

소인수분해

VBA를 이용해서 소인수분해를 해보자.

 

우선 시트에 다음과 같이 입력하고

 

실행버튼에 다음 코드를 연결한 후

 

Sub Prime_Click()

    Dim S As String
    Dim C As Long, D As Long, X As Long, Y As Long, F As Long
    
    C = 0   '소인수로 나눈 횟수. 0으로 리셋
    P = 2   '소인수. 2부터 시작해서 3, 5, 7, ...로 증가
    F = 0   '소인수 갯수. 0으로 리셋
    
    [B5] = ""               '소인수분해 결과 나오는 곳. 이전 결과를 지워야 함
    X = [B3]                '입력한 자연수
    
    Do
        Y = X / P                           'X를 P(소인수)로 나누는데
        If (X Mod P) = 0 Then               'X가 P로 나누어 떨어지면
            X = Y                           '나눈 몫 Y를 X로 다시 지정
            C = C + 1                       'X를 P로 몇번 나눴나 count
        Else
            If C <> 0 Then                  '한번이라도 나누어 떨어지면
                F = F + 1                   '소인수 갯수를 count
                If F > 1 Then               '소인수 갯수가 2개 이상이면
                    S = S & " *"            '결과 중간에 * 를 넣음
                End If
                S = S + Str(P)              '결과 문자열에 소인수를 기록
                If C > 1 Then               '2회 이상 나누어 떨어졌으면
                    S = S + " ^" + Str(C)   '결과 문자열에 ^ 와 횟수를 기록
                End If
                C = 0                       '나눈 횟수를 0으로 리셋
            End If
            If P = 2 Then                   '소인수가 2면
                P = P + 1                   '다음 소인수는 3이니까 1을 더함
            Else                            '소인수가 3 이상이면
                P = P + 2                   '다음 소인수는 홀수니까 2를 더함
            End If
        End If
    Loop While Y >= 1

    [B5] = S

End Sub

 

B3 Cell에 아무 자연수나 입력하고 실행하면

빠르게 소인수분해 결과를 얻을 수 있다.

 

반응형

'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