The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
What is the value of the first triangle number to have over five hundred divisors?
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.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
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
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
댓글 없음:
댓글 쓰기