2 ≤ a ≤ 5 이고 2 ≤ b ≤ 5인 두 정수 a, b로 만들 수 있는 ab의 모든 조합을 구하면 다음과 같습니다.
22=4, 23=8, 24=16, 25=32
32=9, 33=27, 34=81, 35=243
42=16, 43=64, 44=256, 45=1024
52=25, 53=125, 54=625, 55=3125여기서 중복된 것을 빼고 크기 순으로 나열하면 아래와 같은 15개의 숫자가 됩니다.
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
그러면, 2 ≤ a ≤ 100 이고 2 ≤ b ≤ 100인 a, b를 가지고 만들 수 있는 ab는 중복을 제외하면 모두 몇 개입니까?
패기로 푼다.
드디어 감당할 수 없을 정도의 큰 수가 나왔다. Math::BitInt를 사용하여 계산한다.
중복을 제외하기 위해 배열 대신 해쉬를 사용했다는 것 정도가 특이한 점일까.
계산은 약 1초 걸린다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env perl use 5.010; use strict; use warnings; use Math::BigInt; my %h; for my $i (2..100) { for my $j (2..100) { $h{Math::BigInt->new($i)->bpow($j)} = 1; } } say scalar keys %h; |