2010년 10월 29일 금요일

Euler Problem 12

문제는 다음과 같다.
The sequence of triangle numbers is generated by adding the natural numbers. So the 7^(th) triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
Let us list the factors of the first seven triangle numbers:
 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
We can see that 28 is the first triangle number to have over five divisors.
What is the value of the first triangle number to have over five hundred divisors?

인수분해 문제인 것으로 보인다. 삼각수를 계속해서 증가시켜 나가면서 인수분해된 인수의 수가 5000이상인 것은 어떤 수인가를 찾는 문제이다. 이를 위해 계속해서 삼각수를 증가시키면서 인수분해를 수행하도록 프로그래밍 하였다. 또한 인수분해는 N의 제곱근을 넘지 못한다는 점을 고려하여 순환횟수도 줄이도록 하였다.

Sub euler12()
    Dim Num, Order, Limit, Count, i, j
    Dim Check As Boolean   
    Num = 1     ' triangle number
    i = 2           ' 1씩 증가하는 수
    Order = 1   ' 몇번째 triangle number 인가?
    Check = True    ' 반복. false 이면 순환 중지   
    Do While Check = True
        Num = Num + i
        Limit = Int(Sqr(Num))
        Count = 0
        For j = 1 To Limit
            If Num Mod j = 0 Then
                If j = (Num / j) Then
                    Count = Count + 1
                Else
                    Count = Count + 2
                End If
            End If
        Next
        If Count >= 500 Then
            Debug.Print Num, Order + 1 & "번째"
            Check = False
        End If
        i = i + 1
        Order = Order + 1
    Loop
End Sub

댓글 없음:

댓글 쓰기

2.1 벡터(Vector)

  R의 자료구조 : 벡터, factor, 행렬, 배열, 데이터프레임, 리스트 벡터(Vector)는 동일한 형태(예, 숫자)의 데이터 구성인자가 1개 이상이면서 1차원으로 구성되어 있는 데이터 구조입니다. w <- c(1, 2, 3, 4, ...