본문 바로가기

파이썬

[Project Euler]12. Highly divisible triangular number

[문제]
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:

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?

 

[풀이]
import math
n=2
isDivisor500 = True

while isDivisor500:
    triangleNumber = sum(range(1,n))
    result = 0

    for i in range(1, int(math.sqrt(triangleNumber))):
        if triangleNumber % i ==0:
            if i * i==triangleNumber:
                result +=1
            else:
                result +=2
    if result>=500:
        print(triangleNumber)
        print(result)
        isDivisor500=False
    n+=1

'''
math.sqrt를 사용해서 시간을 좀 줄였다

평소에 쓰던 while True를 쓰지 않고 True를 변수에 넣어서 사용했다.
(이렇게 쓰는게 가독성에 더 좋다고 피드백을 받았다)

점점 난이도가 어려워져서 문제푸는 속도가 좀 더디다.. 
한번에 풀리지 않다보니까 의욕도 점점 없어지는 것 같아서 
오일러 프로젝트와 함께 pandas에 대해서 공부하려고 한다!

pandas다음은 텐서플로우를 할 예정이다
'''