{프로젝트 오일러/Project Euler} 9. 특별한 피타고라스 수
알고리즘 공부/프로젝트 오일러(Project Euler)

{프로젝트 오일러/Project Euler} 9. 특별한 피타고라스 수

한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다.

1 <= 입력 개수, 입력값 <= 3000

for _ in range(int(input())):
    n = int(input())
    ans = -1
    for a in range(3, n//3+1):
        b = (n**2 - 2*n*a)/(2*(n - a))
		if b == int(b):
			c = n-b-a
			if a*b*c > ans:
				ans = a*b*c
    print(int(ans))

피타고라스 수를 얻기 위해 이중 반복문을 써도 되지만 아래와 같은 식을 통해 n과 a가 있을 때 b를 구할 수 있습니다.

따라서 위와 같이 b를 구하는데 b가 정수가 아닐 수도 있기 때문에 정수일 때만 c를 구해서 더 큰 a*b*c를 저장합니다.

가장 작은 피타고라스 수는 3, 4, 5이기 때문에 a는 3부터 시작하며 의미상 a=b=c일 때가 최소라고 한다면 a는 n/3까지이다.