오일러프로젝트
[오일러프로젝트] 33번문제
용식
2012. 3. 4. 22:36
분수 49/98에는 재미있는 성질이 있습니다. 수학을 잘 모르는 사람이 분모와 분자에서 9를 각각 지워서 간단히 하려고 49/98 = 4/8 처럼 계산해도 올바른 결과가 됩니다.
이에 비해 30/50 = 3/5 같은 경우는 다소 진부한 예라고 볼 수 있습니다.
위와 같은 성질을 가지면서 '진부하지 않은' 분수는, 값이 1보다 작고 분자와 분모가 2자리 정수인 경우 모두 4개가 있습니다.
이 4개의 분수를 곱해서 약분했을 때 분모는 얼마입니까?
i를 지울 수 있는 수로 봤을 때
10n+i / 10i+d = n/d로 표현 가능하고.. 예제의 49/98 같은 경우
n=4, i=9, d=8로 표현되며.. 이를 식으로 변환하면
9nd = 10in - di가 나옵니다.
이 조건을 만족하는 n,d를 찾아서 원래 분모/분자로 만들어 나누었다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#10n + i / 10i + d = n/d | |
#9nd = 10in - di | |
#i = remove num, d=bunmo, n=bunja | |
# 0 < i < 10 | |
multi_of_d=1 | |
multi_of_n=1 | |
for i in range(1,10): | |
for n in range(1, 10): | |
for d in range(n+1, 10): | |
if 9*n*d == ((10*i*n) - (i*d)): | |
print("n : {0}, d : {1}, i : {2}".format(n, d, i)) | |
t=10*i + d | |
t2=10*n+i | |
multi_of_d = multi_of_d * t | |
multi_of_n = multi_of_n * t2 | |
print (multi_of_d, multi_of_n, multi_of_d / multi_of_n) |
Ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#10n + i / 10i + d = n/d | |
#9nd = 10in - di | |
#i = remove num, d=bunmo, n=bunja | |
# 0 < i < 10 | |
multi_of_d=1 | |
multi_of_n=1 | |
(1..9).each do | |
|i| | |
(1..9).each do | |
|n| | |
(n+1..9).each do | |
|d| | |
if (9*n*d == ((10*i*n)-(i*d))) | |
t=10*i+d | |
t2=10*n+i | |
puts "n : #{n}, d : #{d}, i : #{i}" | |
multi_of_d = multi_of_d * t | |
multi_of_n = multi_of_n * t2 | |
end | |
end | |
end | |
end | |
puts "#{multi_of_d}, #{multi_of_n}, #{multi_of_d/multi_of_n}" |
Perl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#10n + i / 10i + d = n/d | |
#9nd = 10in - di | |
#i = remove num, d=bunmo, n=bunja | |
# 0 < i < 10 | |
my $multi_of_d=1; | |
my $multi_of_n=1; | |
foreach my $i ((1..9)) { | |
foreach my $n ((1..9)) { | |
foreach my $d (($n+1..9)) { | |
if (9*$n*$d == (10*$i*$n) - ($i*$d)) { | |
my $t = 10*$i+$d; | |
my $t2 = 10*$n+$i; | |
print "n : $n, d : $d, i : $i \n"; | |
$multi_of_d = $multi_of_d * $t; | |
$multi_of_n = $multi_of_n * $t2 | |
} | |
} | |
} | |
} | |
my $result = $multi_of_d / $multi_of_n; | |
print "$multi_of_d, $multi_of_n, $result \n"; |