1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다.
예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다.7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다.
이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까?
(참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다)
…오래걸린다.
약 21초 걸렸다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/usr/bin/env perl use 5.010; use strict; use warnings; use Math::Permute::Array; my @a = (1..9); my $r = 0; my %h; my $p = new Math::Permute::Array(@a); for my $i (0..$p->cardinal()-1) { my @t = @{$p->permutation($i)}; for my $i (0..7) { for my $j (0..7-$i) { no warnings; if (join("", @t[0..$i])*join("", @t[$i+1..$j]) == join("", @t[$j+1..8])) { $h{join("", @t[$j+1..8])} = 1; } } } } $r += $_ foreach (keys %h); say $r; |