編集:Rが何であるかを知らない人のために、ここにリンクがあります。
私のCは少し錆びています...私はRで解決策を書きます、それは適応するのが難しいことではないはずです。このソリューションはRで非常に高速に実行されるため、Cではさらに高速になるはずです。
# Create an hash table of cubes from 1 to 100
numbers <- 1:100
cubes <- numbers ^ 3
# The possible pairs of numbers
pairs <- combn(numbers, 2)
# Now sum the cubes of the combinations
# This takes every couple and sums the values of the cubes
# with the appropriate index
sums <- apply(pairs, 2, function(x){sum(cubes[x])})
それで:
numbers
になります:1, 2, 3, 4, ..., 98, 99, 100
cubes
になります:1, 8, 27, 64, ..., 941192, 970299, 1000000
pairs
含まれます:
[,1] [,2] [,3] [,4] [,5] ... [,4949] [,4950]
[1,] 1 1 1 1 1 ... 98 99
[2,] 2 3 4 5 6 ... 100 100
sums
になります:9 28 65 126 217 344 ... 1911491 1941192 1970299
私たちが正しい方向に進んでいることを簡単に確認してください...
> which(sums == 1729)
[1] 11 765 <--- the ids of the couples summing to 1729
> pairs[,11]
[1] 1 12
> pairs[,765]
[1] 9 10
それでは、同じ合計のカップルを見つけましょう。
table(sums)
私たちに次のようなきちんとした要約を与えます
> 9 28 35 65 72 91 ... 1674 1729 1736
1 1 1 1 1 1 .... <lots of 1s here> ... 1 2 1
table(sums)
それでは、のどの要素が==2であるかを見つけましょう
doubles <- which(table(sums) == 2)
taxi.numbers <- as.integer(names(doubles))
[1] 1729 4104 13832 20683 32832 39312 40033 46683 64232 65728
[11] 110656 110808 134379 149389 165464 171288 195841 216027 216125 262656
[21] 314496 320264 327763 373464 402597 439101 443889 513000 513856 515375
[31] 525824 558441 593047 684019 704977 805688 842751 885248 886464 920673
[41] 955016 984067 994688 1009736 1016496
そして最後に(2 x 2で読み取られる)、対応する整数のペア
> pairs[,doubles]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,] 1 9 2 9 2 18 10 19 4 18 2 15 9 16 3
[2,] 12 10 16 15 24 20 27 24 32 30 34 33 34 33 36
[,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29]
[1,] 27 17 26 12 31 4 36 6 27 12 38 8 29 20
[2,] 30 39 36 40 33 48 40 48 45 51 43 53 50 54
[,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43]
[1,] 38 17 24 9 22 3 22 5 45 8 36 4 30 18
[2,] 48 55 54 58 57 60 59 60 50 64 60 68 66 68
[,44] [,45] [,46] [,47] [,48] [,49] [,50] [,51] [,52] [,53] [,54] [,55] [,56] [,57]
[1,] 32 30 51 6 54 42 56 5 48 17 38 10 45 34
[2,] 66 67 58 72 60 69 61 76 69 76 73 80 75 78
[,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65] [,66] [,67] [,68] [,69] [,70] [,71]
[1,] 52 15 54 24 62 30 57 7 63 51 64 2 41 11
[2,] 72 80 71 80 66 81 72 84 70 82 75 89 86 93
[,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85]
[1,] 30 23 63 8 72 12 54 20 33 24 63 35 59 29
[2,] 92 94 84 96 80 96 90 97 96 98 89 98 92 99
[,86] [,87] [,88] [,89] [,90]
[1,] 60 50 59 47 66
[2,] 92 96 93 97 90
それで:
1,12と9,10は1729を与えます
2,16と9,15は
41042,24と18,20を与えます13832
などを与えます!