통계, IT, AI

33. Digit cancelling fractions 본문

IT/PROJECT_EULER

33. Digit cancelling fractions

Harold_Finch 2017. 3. 1. 17:53

1. 개요

문제는 이곳에서 확인할 수 있다. \(49/98\)은 흥미로운 분수인데, 분자와 분모에 포함된 같은 수 9를 지우면 본래의 값과 같기 때문이다. 이와 같은 특성을 보이는 분수를 찾아 곱하고 약분한 후 분모의 값을 구하는 것이 목표이다. 단, 분자와 분모가 각각 두자리 수여야 하며 분수는 1보다 작아야 한다. 그리고 공통된 수는 0이 아니어야 한다. 이러한 특성을 보이는 분수는 4개가 있다고 한다.


2. 구현

십의 자리가 \(a\), 일의 자리가 \(b\)인 어떤 두자리 수를 간략하게 \(ab\)로 나타내자. 분자와 분모에 공통적으로 포함된 같은 수를 \(d\)라고 하면 확인해야 할 분수의 형태는 \(da/db\), \(ad/db\), \(da/bd\), \(ad/bd\)의 4가지 밖에 없다. 또한 문제의 조건에 따라 \(a<b\)이다. 이를 이용하여 다음과 같이 구현한다. 이때 나눗셈의 비교는 오차를 발생시킬 가능성이 매우 크므로 곱으로 비교한다.

# -*- coding: utf-8 -*- 

for d in range(1,10):
	for a in range(1,10):
		for b in range(a+1,10):
			
			# CASE 1: da/db
			if (d*10+a)*b == (d*10+b)*a:
				print(d*10+a,'/',d*10+b)
				
			# CASE 2: ad/db
			if (a*10+d)*b == (d*10+b)*a:
				print(a*10+d,'/',d*10+b)
				
			# CASE 3: da/bd
			if (d*10+a)*b == (d+b*10)*a:
				print(d*10+a,'/',d+b*10)
				
			# CASE 4: ad/bd
			if (d+a*10)*b == (d+b*10)*a:
				print(d+a*10,'/',d+b*10)

답은 100이다.

'IT > PROJECT_EULER' 카테고리의 다른 글

35. Circular primes  (0) 2017.03.19
34. Digit factorials  (0) 2017.03.02
32. Pandigital products  (0) 2017.02.26
31. Coin sums  (0) 2017.02.09
30. Digit fifth powers  (0) 2017.01.31
Comments