15 August 2015

Problem 009

세 자연수 a, b, c 가 피타고라스 정리 a^2 + b^2 = c^2 를 만족하면 피타고라스 수라고 부릅니다 (여기서 a < b < c ).

예를 들면 3^2 + 4^2 = 9 + 16 = 25 = 5^2이므로 3, 4, 5는 피타고라스 수입니다.

a + b + c = 1000 인 피타고라스 수 a, b, c는 한 가지 뿐입니다. 이 때, a × b × c 는 얼마입니까?

Solution

a^2 + b^2 = c^2 과 a + b + c = sum이라는 조건을 가지고 다음 식을 얻었습니다.

a = ((sum * sum)/2 - sum * b) / (sum - b)

위의 식을 가지고 다음 코드를 작성할 수 있습니다.

let sum = 1000
  • 수정 전
for var b = 1; b < sum / 2; b++ {
	var a = Double(((sum * sum)/2 - sum * b)) / Double((sum - b))
	if a % 1 == 0 {
		println("Result = \(Int(a) * b * (sum - Int(a) - b))")	// 31875000
		break;
	}
}
  • 수정 후
let result = reduce(1..<sum/2, 0) { result, b in
	let a = Double(((sum * sum)/2 - sum * b)) / Double((sum - b))
	return (a % 1 == 0) ? Int(a) * b * (sum - Int(a) - b) : result
}

println(result)	// 31875000

문제 출처