오일러프로젝트

[오일러프로젝트] 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를 찾아서 원래 분모/분자로 만들어 나누었다.

 
 

Python
#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)
view raw 33.py hosted with ❤ by GitHub

Ruby
#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}"
view raw 33.rb hosted with ❤ by GitHub

Perl
#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";
view raw 33.pl hosted with ❤ by GitHub