
Packages
Contents
Background
Youtubeを見てたら遭遇した面白い動画の話。数学は全然わからないんですが、この方の動画は面白く拝見させてもらっています。
2種類以下の数字で構成されていて、かつ0で終わらない平方数は意外と少なく、今知られている最大の数は\(81619^2=6661661161\)だそうです1。というわけで、Rで確認してみましょう。大きな数を扱うので、gmpパッケージでちゃんと表せるようにします。
Process
あまり扱う数字が大きいと時間がかかるので、2乗する前の数を100万くらいまで確認してみます。100万でも体感5秒以上かかります。普段の感覚からすれば時間がかかっている方です。
- 1
-
e1 ^ e2のこと。戻り値はbigzクラスになります。 - 2
-
中身は
gmp:::as.character.bigz()。 - 3
-
grep("0$", x = names(x), invert = TRUE)でも可。grepl()だとlogical vectorが返ってきて、grep()だとindexのinteger vectorが返ってくる。どっちの方が好ましいのかは不明。 - 4
-
strsplit()はlistを返すので、vapply()で処理。あとでブラケット([)の中にindexとして入れる予定なので、引数FUN.VALUEはinteger(1)で整数を指定。
1 2 3 4 5 6 7
"1" "4" "9" "16" "25" "36" "49"
8 9 11 12 15 21 22
"64" "81" "121" "144" "225" "441" "484"
26 38 88 109 173 212 235
"676" "1444" "7744" "11881" "29929" "44944" "55225"
264 3114 81619
"69696" "9696996" "6661661161"
要素が100万もあるのでちょっと時間がかかりますが、無事に掲載されている数列と同じ数を得ることができました。
なんかそのままだとViewPipeSteps::print_pipe_steps()がエラーを吐くので、最後のパイプ処理のところだけ見づらい書き方をしています。
pow.bigz(1:1e6, e2 = 2) %>%
as.character() %>%
setNames(nm = 1:1e6) %>%
.[!grepl("0$", x = names(.))] %>%
.[
strsplit(., split = "") |>
vapply(
FUN = \(x) {
unique(x) |>
length()
},
FUN.VALUE = integer(1)
) |>
`<=`(e1 = _, e2 = 2)
] %>%
ViewPipeSteps::print_pipe_steps() -> res # for displaying pipeline processing1. pow.bigz(1:1e+06, e2 = 2)
Big Integer ('bigz') object of length 1000000:
[1] 1 4 9 16 25 36 49 64 81 100 121 144 169
[14] 196 225 256 289 324 361 400 441 484 529 576 625 676
[27] 729 784 841 900 961 1024 1089 1156 1225 1296 1369 1444 1521
[40] 1600 1681 1764 1849 1936 2025 2116 2209 2304 2401 2500 2601 2704
[53] 2809 2916 3025 3136 3249 3364 3481 3600 3721 3844 3969 4096 4225
[66] 4356 4489 4624 4761 4900 5041 5184 5329 5476 5625 5776 5929 6084
[79] 6241 6400 6561 6724 6889 7056 7225 7396 7569 7744 7921 8100 8281
[92] 8464 8649 8836 9025 9216 9409 9604 9801 10000 10201 10404 10609 10816
[105] 11025 11236 11449 11664 11881 12100 12321 12544 12769 12996 13225 13456 13689
[118] 13924 14161 14400 14641 14884 15129 15376 15625 15876 16129 16384 16641 16900
[131] 17161 17424 17689 17956 18225 18496 18769 19044 19321 19600 19881 20164 20449
[144] 20736 21025 21316 21609 21904 22201 22500 22801 23104 23409 23716 24025 24336
[157] 24649 24964 25281 25600 25921 26244 26569 26896 27225 27556 27889 28224 28561
[170] 28900 29241 29584 29929 30276 30625 30976 31329 31684 32041 32400 32761 33124
[183] 33489 33856 34225 34596 34969 35344 35721 36100 36481 36864 37249 37636 38025
[196] 38416 38809 39204 39601 40000 40401 40804 41209 41616 42025 42436 42849 43264
[209] 43681 44100 44521 44944 45369 45796 46225 46656 47089 47524 47961 48400 48841
[222] 49284 49729 50176 50625 51076 51529 51984 52441 52900 53361 53824 54289 54756
[235] 55225 55696 56169 56644 57121 57600 58081 58564 59049 59536 60025 60516 61009
[248] 61504 62001 62500 63001 63504 64009 64516 65025 65536 66049 66564 67081 67600
[261] 68121 68644 69169 69696 70225 70756 71289 71824 72361 72900 73441 73984 74529
[274] 75076 75625 76176 76729 77284 77841 78400 78961 79524 80089 80656 81225 81796
[287] 82369 82944 83521 84100 84681 85264 85849 86436 87025 87616 88209 88804 89401
[300] 90000 90601 91204 91809 92416 93025 93636 94249 94864 95481 96100 96721 97344
[313] 97969 98596 99225 99856 100489 101124 101761 102400 103041 103684 104329 104976 105625
[326] 106276 106929 107584 108241 108900 109561 110224 110889 111556 112225 112896 113569 114244
[339] 114921 115600 116281 116964 117649 118336 119025 119716 120409 121104 121801 122500 123201
[352] 123904 124609 125316 126025 126736 127449 128164 128881 129600 130321 131044 131769 132496
[365] 133225 133956 134689 135424 136161 136900 137641 138384 139129 139876 140625 141376 142129
[378] 142884 143641 144400 145161 145924 146689 147456 148225 148996 149769 150544 151321 152100
[391] 152881 153664 154449 155236 156025 156816 157609 158404 159201 160000 160801 161604 162409
[404] 163216 164025 164836 165649 166464 167281 168100 168921 169744 170569 171396 172225 173056
[417] 173889 174724 175561 176400 177241 178084 178929 179776 180625 181476 182329 183184 184041
[430] 184900 185761 186624 187489 188356 189225 190096 190969 191844 192721 193600 194481 195364
[443] 196249 197136 198025 198916 199809 200704 201601 202500 203401 204304 205209 206116 207025
[456] 207936 208849 209764 210681 211600 212521 213444 214369 215296 216225 217156 218089 219024
[469] 219961 220900 221841 222784 223729 224676 225625 226576 227529 228484 229441 230400 231361
[482] 232324 233289 234256 235225 236196 237169 238144 239121 240100 241081 242064 243049 244036
[495] 245025 246016 247009 248004 249001 250000
[ reached 'max' / getOption("max.print") -- omitted 999500 entries ]
2. as.character()
[1] "1" "4" "9" "16" "25" "36" "49" "64" "81" "100"
[11] "121" "144" "169" "196" "225" "256" "289" "324" "361" "400"
[21] "441" "484" "529" "576" "625" "676" "729" "784" "841" "900"
[31] "961" "1024" "1089" "1156" "1225" "1296" "1369" "1444" "1521" "1600"
[41] "1681" "1764" "1849" "1936" "2025" "2116" "2209" "2304" "2401" "2500"
[51] "2601" "2704" "2809" "2916" "3025" "3136" "3249" "3364" "3481" "3600"
[61] "3721" "3844" "3969" "4096" "4225" "4356" "4489" "4624" "4761" "4900"
[71] "5041" "5184" "5329" "5476" "5625" "5776" "5929" "6084" "6241" "6400"
[81] "6561" "6724" "6889" "7056" "7225" "7396" "7569" "7744" "7921" "8100"
[91] "8281" "8464" "8649" "8836" "9025" "9216" "9409" "9604" "9801" "10000"
[101] "10201" "10404" "10609" "10816" "11025" "11236" "11449" "11664" "11881" "12100"
[111] "12321" "12544" "12769" "12996" "13225" "13456" "13689" "13924" "14161" "14400"
[121] "14641" "14884" "15129" "15376" "15625" "15876" "16129" "16384" "16641" "16900"
[131] "17161" "17424" "17689" "17956" "18225" "18496" "18769" "19044" "19321" "19600"
[141] "19881" "20164" "20449" "20736" "21025" "21316" "21609" "21904" "22201" "22500"
[151] "22801" "23104" "23409" "23716" "24025" "24336" "24649" "24964" "25281" "25600"
[161] "25921" "26244" "26569" "26896" "27225" "27556" "27889" "28224" "28561" "28900"
[171] "29241" "29584" "29929" "30276" "30625" "30976" "31329" "31684" "32041" "32400"
[181] "32761" "33124" "33489" "33856" "34225" "34596" "34969" "35344" "35721" "36100"
[191] "36481" "36864" "37249" "37636" "38025" "38416" "38809" "39204" "39601" "40000"
[201] "40401" "40804" "41209" "41616" "42025" "42436" "42849" "43264" "43681" "44100"
[211] "44521" "44944" "45369" "45796" "46225" "46656" "47089" "47524" "47961" "48400"
[221] "48841" "49284" "49729" "50176" "50625" "51076" "51529" "51984" "52441" "52900"
[231] "53361" "53824" "54289" "54756" "55225" "55696" "56169" "56644" "57121" "57600"
[241] "58081" "58564" "59049" "59536" "60025" "60516" "61009" "61504" "62001" "62500"
[251] "63001" "63504" "64009" "64516" "65025" "65536" "66049" "66564" "67081" "67600"
[261] "68121" "68644" "69169" "69696" "70225" "70756" "71289" "71824" "72361" "72900"
[271] "73441" "73984" "74529" "75076" "75625" "76176" "76729" "77284" "77841" "78400"
[281] "78961" "79524" "80089" "80656" "81225" "81796" "82369" "82944" "83521" "84100"
[291] "84681" "85264" "85849" "86436" "87025" "87616" "88209" "88804" "89401" "90000"
[301] "90601" "91204" "91809" "92416" "93025" "93636" "94249" "94864" "95481" "96100"
[311] "96721" "97344" "97969" "98596" "99225" "99856" "100489" "101124" "101761" "102400"
[321] "103041" "103684" "104329" "104976" "105625" "106276" "106929" "107584" "108241" "108900"
[331] "109561" "110224" "110889" "111556" "112225" "112896" "113569" "114244" "114921" "115600"
[341] "116281" "116964" "117649" "118336" "119025" "119716" "120409" "121104" "121801" "122500"
[351] "123201" "123904" "124609" "125316" "126025" "126736" "127449" "128164" "128881" "129600"
[361] "130321" "131044" "131769" "132496" "133225" "133956" "134689" "135424" "136161" "136900"
[371] "137641" "138384" "139129" "139876" "140625" "141376" "142129" "142884" "143641" "144400"
[381] "145161" "145924" "146689" "147456" "148225" "148996" "149769" "150544" "151321" "152100"
[391] "152881" "153664" "154449" "155236" "156025" "156816" "157609" "158404" "159201" "160000"
[401] "160801" "161604" "162409" "163216" "164025" "164836" "165649" "166464" "167281" "168100"
[411] "168921" "169744" "170569" "171396" "172225" "173056" "173889" "174724" "175561" "176400"
[421] "177241" "178084" "178929" "179776" "180625" "181476" "182329" "183184" "184041" "184900"
[431] "185761" "186624" "187489" "188356" "189225" "190096" "190969" "191844" "192721" "193600"
[441] "194481" "195364" "196249" "197136" "198025" "198916" "199809" "200704" "201601" "202500"
[451] "203401" "204304" "205209" "206116" "207025" "207936" "208849" "209764" "210681" "211600"
[461] "212521" "213444" "214369" "215296" "216225" "217156" "218089" "219024" "219961" "220900"
[471] "221841" "222784" "223729" "224676" "225625" "226576" "227529" "228484" "229441" "230400"
[481] "231361" "232324" "233289" "234256" "235225" "236196" "237169" "238144" "239121" "240100"
[491] "241081" "242064" "243049" "244036" "245025" "246016" "247009" "248004" "249001" "250000"
[ reached 'max' / getOption("max.print") -- omitted 999500 entries ]
3. setNames(nm = 1:1e+06)
1 2 3 4 5 6 7 8 9 10 11
"1" "4" "9" "16" "25" "36" "49" "64" "81" "100" "121"
12 13 14 15 16 17 18 19 20 21 22
"144" "169" "196" "225" "256" "289" "324" "361" "400" "441" "484"
23 24 25 26 27 28 29 30 31 32 33
"529" "576" "625" "676" "729" "784" "841" "900" "961" "1024" "1089"
34 35 36 37 38 39 40 41 42 43 44
"1156" "1225" "1296" "1369" "1444" "1521" "1600" "1681" "1764" "1849" "1936"
45 46 47 48 49 50 51 52 53 54 55
"2025" "2116" "2209" "2304" "2401" "2500" "2601" "2704" "2809" "2916" "3025"
56 57 58 59 60 61 62 63 64 65 66
"3136" "3249" "3364" "3481" "3600" "3721" "3844" "3969" "4096" "4225" "4356"
67 68 69 70 71 72 73 74 75 76 77
"4489" "4624" "4761" "4900" "5041" "5184" "5329" "5476" "5625" "5776" "5929"
78 79 80 81 82 83 84 85 86 87 88
"6084" "6241" "6400" "6561" "6724" "6889" "7056" "7225" "7396" "7569" "7744"
89 90 91 92 93 94 95 96 97 98 99
"7921" "8100" "8281" "8464" "8649" "8836" "9025" "9216" "9409" "9604" "9801"
100 101 102 103 104 105 106 107 108 109 110
"10000" "10201" "10404" "10609" "10816" "11025" "11236" "11449" "11664" "11881" "12100"
111 112 113 114 115 116 117 118 119 120 121
"12321" "12544" "12769" "12996" "13225" "13456" "13689" "13924" "14161" "14400" "14641"
122 123 124 125 126 127 128 129 130 131 132
"14884" "15129" "15376" "15625" "15876" "16129" "16384" "16641" "16900" "17161" "17424"
133 134 135 136 137 138 139 140 141 142 143
"17689" "17956" "18225" "18496" "18769" "19044" "19321" "19600" "19881" "20164" "20449"
144 145 146 147 148 149 150 151 152 153 154
"20736" "21025" "21316" "21609" "21904" "22201" "22500" "22801" "23104" "23409" "23716"
155 156 157 158 159 160 161 162 163 164 165
"24025" "24336" "24649" "24964" "25281" "25600" "25921" "26244" "26569" "26896" "27225"
166 167 168 169 170 171 172 173 174 175 176
"27556" "27889" "28224" "28561" "28900" "29241" "29584" "29929" "30276" "30625" "30976"
177 178 179 180 181 182 183 184 185 186 187
"31329" "31684" "32041" "32400" "32761" "33124" "33489" "33856" "34225" "34596" "34969"
188 189 190 191 192 193 194 195 196 197 198
"35344" "35721" "36100" "36481" "36864" "37249" "37636" "38025" "38416" "38809" "39204"
199 200 201 202 203 204 205 206 207 208 209
"39601" "40000" "40401" "40804" "41209" "41616" "42025" "42436" "42849" "43264" "43681"
210 211 212 213 214 215 216 217 218 219 220
"44100" "44521" "44944" "45369" "45796" "46225" "46656" "47089" "47524" "47961" "48400"
221 222 223 224 225 226 227 228 229 230 231
"48841" "49284" "49729" "50176" "50625" "51076" "51529" "51984" "52441" "52900" "53361"
232 233 234 235 236 237 238 239 240 241 242
"53824" "54289" "54756" "55225" "55696" "56169" "56644" "57121" "57600" "58081" "58564"
243 244 245 246 247 248 249 250 251 252 253
"59049" "59536" "60025" "60516" "61009" "61504" "62001" "62500" "63001" "63504" "64009"
254 255 256 257 258 259 260 261 262 263 264
"64516" "65025" "65536" "66049" "66564" "67081" "67600" "68121" "68644" "69169" "69696"
265 266 267 268 269 270 271 272 273 274 275
"70225" "70756" "71289" "71824" "72361" "72900" "73441" "73984" "74529" "75076" "75625"
276 277 278 279 280 281 282 283 284 285 286
"76176" "76729" "77284" "77841" "78400" "78961" "79524" "80089" "80656" "81225" "81796"
287 288 289 290 291 292 293 294 295 296 297
"82369" "82944" "83521" "84100" "84681" "85264" "85849" "86436" "87025" "87616" "88209"
298 299 300 301 302 303 304 305 306 307 308
"88804" "89401" "90000" "90601" "91204" "91809" "92416" "93025" "93636" "94249" "94864"
309 310 311 312 313 314 315 316 317 318 319
"95481" "96100" "96721" "97344" "97969" "98596" "99225" "99856" "100489" "101124" "101761"
320 321 322 323 324 325 326 327 328 329 330
"102400" "103041" "103684" "104329" "104976" "105625" "106276" "106929" "107584" "108241" "108900"
331 332 333 334 335 336 337 338 339 340 341
"109561" "110224" "110889" "111556" "112225" "112896" "113569" "114244" "114921" "115600" "116281"
342 343 344 345 346 347 348 349 350 351 352
"116964" "117649" "118336" "119025" "119716" "120409" "121104" "121801" "122500" "123201" "123904"
353 354 355 356 357 358 359 360 361 362 363
"124609" "125316" "126025" "126736" "127449" "128164" "128881" "129600" "130321" "131044" "131769"
364 365 366 367 368 369 370 371 372 373 374
"132496" "133225" "133956" "134689" "135424" "136161" "136900" "137641" "138384" "139129" "139876"
375 376 377 378 379 380 381 382 383 384 385
"140625" "141376" "142129" "142884" "143641" "144400" "145161" "145924" "146689" "147456" "148225"
386 387 388 389 390 391 392 393 394 395 396
"148996" "149769" "150544" "151321" "152100" "152881" "153664" "154449" "155236" "156025" "156816"
397 398 399 400 401 402 403 404 405 406 407
"157609" "158404" "159201" "160000" "160801" "161604" "162409" "163216" "164025" "164836" "165649"
408 409 410 411 412 413 414 415 416 417 418
"166464" "167281" "168100" "168921" "169744" "170569" "171396" "172225" "173056" "173889" "174724"
419 420 421 422 423 424 425 426 427 428 429
"175561" "176400" "177241" "178084" "178929" "179776" "180625" "181476" "182329" "183184" "184041"
430 431 432 433 434 435 436 437 438 439 440
"184900" "185761" "186624" "187489" "188356" "189225" "190096" "190969" "191844" "192721" "193600"
441 442 443 444 445 446 447 448 449 450 451
"194481" "195364" "196249" "197136" "198025" "198916" "199809" "200704" "201601" "202500" "203401"
452 453 454 455 456 457 458 459 460 461 462
"204304" "205209" "206116" "207025" "207936" "208849" "209764" "210681" "211600" "212521" "213444"
463 464 465 466 467 468 469 470 471 472 473
"214369" "215296" "216225" "217156" "218089" "219024" "219961" "220900" "221841" "222784" "223729"
474 475 476 477 478 479 480 481 482 483 484
"224676" "225625" "226576" "227529" "228484" "229441" "230400" "231361" "232324" "233289" "234256"
485 486 487 488 489 490 491 492 493 494 495
"235225" "236196" "237169" "238144" "239121" "240100" "241081" "242064" "243049" "244036" "245025"
496 497 498 499 500
"246016" "247009" "248004" "249001" "250000"
[ reached 'max' / getOption("max.print") -- omitted 999500 entries ]
4. .[!grepl("0$", x = names(.))]
1 2 3 4 5 6 7 8 9 11 12
"1" "4" "9" "16" "25" "36" "49" "64" "81" "121" "144"
13 14 15 16 17 18 19 21 22 23 24
"169" "196" "225" "256" "289" "324" "361" "441" "484" "529" "576"
25 26 27 28 29 31 32 33 34 35 36
"625" "676" "729" "784" "841" "961" "1024" "1089" "1156" "1225" "1296"
37 38 39 41 42 43 44 45 46 47 48
"1369" "1444" "1521" "1681" "1764" "1849" "1936" "2025" "2116" "2209" "2304"
49 51 52 53 54 55 56 57 58 59 61
"2401" "2601" "2704" "2809" "2916" "3025" "3136" "3249" "3364" "3481" "3721"
62 63 64 65 66 67 68 69 71 72 73
"3844" "3969" "4096" "4225" "4356" "4489" "4624" "4761" "5041" "5184" "5329"
74 75 76 77 78 79 81 82 83 84 85
"5476" "5625" "5776" "5929" "6084" "6241" "6561" "6724" "6889" "7056" "7225"
86 87 88 89 91 92 93 94 95 96 97
"7396" "7569" "7744" "7921" "8281" "8464" "8649" "8836" "9025" "9216" "9409"
98 99 101 102 103 104 105 106 107 108 109
"9604" "9801" "10201" "10404" "10609" "10816" "11025" "11236" "11449" "11664" "11881"
111 112 113 114 115 116 117 118 119 121 122
"12321" "12544" "12769" "12996" "13225" "13456" "13689" "13924" "14161" "14641" "14884"
123 124 125 126 127 128 129 131 132 133 134
"15129" "15376" "15625" "15876" "16129" "16384" "16641" "17161" "17424" "17689" "17956"
135 136 137 138 139 141 142 143 144 145 146
"18225" "18496" "18769" "19044" "19321" "19881" "20164" "20449" "20736" "21025" "21316"
147 148 149 151 152 153 154 155 156 157 158
"21609" "21904" "22201" "22801" "23104" "23409" "23716" "24025" "24336" "24649" "24964"
159 161 162 163 164 165 166 167 168 169 171
"25281" "25921" "26244" "26569" "26896" "27225" "27556" "27889" "28224" "28561" "29241"
172 173 174 175 176 177 178 179 181 182 183
"29584" "29929" "30276" "30625" "30976" "31329" "31684" "32041" "32761" "33124" "33489"
184 185 186 187 188 189 191 192 193 194 195
"33856" "34225" "34596" "34969" "35344" "35721" "36481" "36864" "37249" "37636" "38025"
196 197 198 199 201 202 203 204 205 206 207
"38416" "38809" "39204" "39601" "40401" "40804" "41209" "41616" "42025" "42436" "42849"
208 209 211 212 213 214 215 216 217 218 219
"43264" "43681" "44521" "44944" "45369" "45796" "46225" "46656" "47089" "47524" "47961"
221 222 223 224 225 226 227 228 229 231 232
"48841" "49284" "49729" "50176" "50625" "51076" "51529" "51984" "52441" "53361" "53824"
233 234 235 236 237 238 239 241 242 243 244
"54289" "54756" "55225" "55696" "56169" "56644" "57121" "58081" "58564" "59049" "59536"
245 246 247 248 249 251 252 253 254 255 256
"60025" "60516" "61009" "61504" "62001" "63001" "63504" "64009" "64516" "65025" "65536"
257 258 259 261 262 263 264 265 266 267 268
"66049" "66564" "67081" "68121" "68644" "69169" "69696" "70225" "70756" "71289" "71824"
269 271 272 273 274 275 276 277 278 279 281
"72361" "73441" "73984" "74529" "75076" "75625" "76176" "76729" "77284" "77841" "78961"
282 283 284 285 286 287 288 289 291 292 293
"79524" "80089" "80656" "81225" "81796" "82369" "82944" "83521" "84681" "85264" "85849"
294 295 296 297 298 299 301 302 303 304 305
"86436" "87025" "87616" "88209" "88804" "89401" "90601" "91204" "91809" "92416" "93025"
306 307 308 309 311 312 313 314 315 316 317
"93636" "94249" "94864" "95481" "96721" "97344" "97969" "98596" "99225" "99856" "100489"
318 319 321 322 323 324 325 326 327 328 329
"101124" "101761" "103041" "103684" "104329" "104976" "105625" "106276" "106929" "107584" "108241"
331 332 333 334 335 336 337 338 339 341 342
"109561" "110224" "110889" "111556" "112225" "112896" "113569" "114244" "114921" "116281" "116964"
343 344 345 346 347 348 349 351 352 353 354
"117649" "118336" "119025" "119716" "120409" "121104" "121801" "123201" "123904" "124609" "125316"
355 356 357 358 359 361 362 363 364 365 366
"126025" "126736" "127449" "128164" "128881" "130321" "131044" "131769" "132496" "133225" "133956"
367 368 369 371 372 373 374 375 376 377 378
"134689" "135424" "136161" "137641" "138384" "139129" "139876" "140625" "141376" "142129" "142884"
379 381 382 383 384 385 386 387 388 389 391
"143641" "145161" "145924" "146689" "147456" "148225" "148996" "149769" "150544" "151321" "152881"
392 393 394 395 396 397 398 399 401 402 403
"153664" "154449" "155236" "156025" "156816" "157609" "158404" "159201" "160801" "161604" "162409"
404 405 406 407 408 409 411 412 413 414 415
"163216" "164025" "164836" "165649" "166464" "167281" "168921" "169744" "170569" "171396" "172225"
416 417 418 419 421 422 423 424 425 426 427
"173056" "173889" "174724" "175561" "177241" "178084" "178929" "179776" "180625" "181476" "182329"
428 429 431 432 433 434 435 436 437 438 439
"183184" "184041" "185761" "186624" "187489" "188356" "189225" "190096" "190969" "191844" "192721"
441 442 443 444 445 446 447 448 449 451 452
"194481" "195364" "196249" "197136" "198025" "198916" "199809" "200704" "201601" "203401" "204304"
453 454 455 456 457 458 459 461 462 463 464
"205209" "206116" "207025" "207936" "208849" "209764" "210681" "212521" "213444" "214369" "215296"
465 466 467 468 469 471 472 473 474 475 476
"216225" "217156" "218089" "219024" "219961" "221841" "222784" "223729" "224676" "225625" "226576"
477 478 479 481 482 483 484 485 486 487 488
"227529" "228484" "229441" "231361" "232324" "233289" "234256" "235225" "236196" "237169" "238144"
489 491 492 493 494 495 496 497 498 499 501
"239121" "241081" "242064" "243049" "244036" "245025" "246016" "247009" "248004" "249001" "251001"
502 503 504 505 506 507 508 509 511 512 513
"252004" "253009" "254016" "255025" "256036" "257049" "258064" "259081" "261121" "262144" "263169"
514 515 516 517 518 519 521 522 523 524 525
"264196" "265225" "266256" "267289" "268324" "269361" "271441" "272484" "273529" "274576" "275625"
526 527 528 529 531 532 533 534 535 536 537
"276676" "277729" "278784" "279841" "281961" "283024" "284089" "285156" "286225" "287296" "288369"
538 539 541 542 543 544 545 546 547 548 549
"289444" "290521" "292681" "293764" "294849" "295936" "297025" "298116" "299209" "300304" "301401"
551 552 553 554 555
"303601" "304704" "305809" "306916" "308025"
[ reached 'max' / getOption("max.print") -- omitted 899500 entries ]
5. .[vapply(strsplit(., split = ""), FUN = function(x) {
length(unique(x))
}, FUN.VALUE = integer(1)) <= 2]
1 2 3 4 5 6 7
"1" "4" "9" "16" "25" "36" "49"
8 9 11 12 15 21 22
"64" "81" "121" "144" "225" "441" "484"
26 38 88 109 173 212 235
"676" "1444" "7744" "11881" "29929" "44944" "55225"
264 3114 81619
"69696" "9696996" "6661661161"
data.frameを使ってやるとしたらこんな感じでしょうか?
data.frame(nums = gmp::as.bigz(1:1e6)) |>
1 subset(subset = nums %% 10 != 0) |>
transform(
powers = gmp::pow.bigz(nums, e2 = 2) |>
as.character()
) |>
2 transform(
n_kinds_digit = strsplit(powers, split = "") |>
vapply(
FUN = \(x) {
unique(x) |>
length()
},
FUN.VALUE = integer(1)
)
) |>
subset(subset = n_kinds_digit <= 2)- 1
-
前の処理でbigzクラスを作っているので、ここの処理は多分
gmp::mod.bigz()になってると思います。 - 2
-
transform()はdplyr::mutate()と違って、中で作った変数をすぐ使えるわけじゃないというふうに理解しています。微妙に使いづらいです。中で同じ処理を繰り返して書くか、transform()を繰り返すかですかね。
nums powers n_kinds_digit
1 1 1 1
2 2 4 1
3 3 9 1
4 4 16 2
5 5 25 2
6 6 36 2
7 7 49 2
8 8 64 2
9 9 81 2
11 11 121 2
12 12 144 2
15 15 225 2
21 21 441 2
22 22 484 2
26 26 676 2
38 38 1444 2
88 88 7744 2
109 109 11881 2
173 173 29929 2
212 212 44944 2
235 235 55225 2
264 264 69696 2
3114 3114 9696996 2
81619 81619 6661661161 2
tibbleがbigzクラスとかと相性が悪いみたいなのですが2、ViewPipeSteps::print_pipe_steps()がdata.frameをtibbleに変換しちゃうので、bigzクラスをchrに変えています。
data.frame(
nums = gmp::as.bigz(1:1e6) |>
as.character()
) %>%
subset(subset = !grepl(pattern = "0$", x = nums)) %>%
transform(
powers = gmp::pow.bigz(nums, e2 = 2) |>
as.character()
) %>%
transform(
n_kinds_digit = strsplit(powers, split = "") |>
vapply(
FUN = \(x) {
unique(x) |>
length()
},
FUN.VALUE = integer(1)
)
) %>%
subset(subset = n_kinds_digit <= 2) %>%
ViewPipeSteps::print_pipe_steps() -> res # for displaying pipeline processing1. data.frame(nums = as.character(gmp::as.bigz(1:1e+06)))
# A tibble: 1,000,000 × 1
nums
<chr>
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
# ℹ 999,990 more rows
2. subset(subset = !grepl(pattern = "0$", x = nums))
# A tibble: 900,000 × 1
nums
<chr>
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 11
# ℹ 899,990 more rows
3. transform(powers = as.character(gmp::pow.bigz(nums, e2 = 2)))
# A tibble: 900,000 × 2
nums powers
<chr> <chr>
1 1 1
2 2 4
3 3 9
4 4 16
5 5 25
6 6 36
7 7 49
8 8 64
9 9 81
10 11 121
# ℹ 899,990 more rows
4. transform(n_kinds_digit = vapply(strsplit(powers, split = ""), FUN = function(x) {
length(unique(x))
}, FUN.VALUE = integer(1)))
# A tibble: 900,000 × 3
nums powers n_kinds_digit
<chr> <chr> <int>
1 1 1 1
2 2 4 1
3 3 9 1
4 4 16 2
5 5 25 2
6 6 36 2
7 7 49 2
8 8 64 2
9 9 81 2
10 11 121 2
# ℹ 899,990 more rows
5. subset(subset = n_kinds_digit <= 2)
# A tibble: 24 × 3
nums powers n_kinds_digit
<chr> <chr> <int>
1 1 1 1
2 2 4 1
3 3 9 1
4 4 16 2
5 5 25 2
6 6 36 2
7 7 49 2
8 8 64 2
9 9 81 2
10 11 121 2
# ℹ 14 more rows
Plot
平方数の方で出てきた数字の種類について、いろいろ図にしてみました。まずは結果だけオブジェクトにします。
1df_res <- tibble(nums = 1:1e6) |>
mutate(
powers = pow.bigz(nums, e2 = 2) |>
as.character(),
n_kinds_digits = str_split(powers, pattern = "") |>
map_int(
.f = \(x) {
unique(x) |>
length()
}
)
)- 1
- ggplotがbigzクラスを受け取ってくれないので仕方なく。演算しないで並べてるだけだから、多分問題ないはず…。
こんな感じで結果が収められています。ここでは数字の種類ごとに2個ずつ抽出しています。
# A tibble: 20 × 3
nums powers n_kinds_digits
<int> <chr> <int>
1 1 1 1
2 2 4 1
3 4 16 2
4 5 25 2
5 13 169 3
6 14 196 3
7 32 1024 4
8 33 1089 4
9 113 12769 5
10 116 13456 5
11 322 103684 6
12 323 104329 6
13 1017 1034289 7
14 1023 1046529 7
15 3206 10278436 8
16 3267 10673289 8
17 10124 102495376 9
18 10128 102576384 9
19 32043 1026753849 10
20 32286 1042385796 10
もちろん、平方数に現れる数字が2種類以下のもの(元の数の末尾が0のものを除く)の結果はさきほどと同じです。
df_res |>
1 filter_out(nums %% 10 == 0) |>
filter(n_kinds_digits <= 2) |>
print(n = 99)- 1
-
dplyr>= 1.2.0で使えます。要素を除外したいときはfilter_out()を使う方が意思がわかってよいです。前の書き方だとfilter(nums %% 10 != 0)ですね。あとデカい数字を扱うときにそのまま計算するのは地味に危ない気がする。(7桁ぐらいならセーフなのだろうか?)
# A tibble: 24 × 3
nums powers n_kinds_digits
<int> <chr> <int>
1 1 1 1
2 2 4 1
3 3 9 1
4 4 16 2
5 5 25 2
6 6 36 2
7 7 49 2
8 8 64 2
9 9 81 2
10 11 121 2
11 12 144 2
12 15 225 2
13 21 441 2
14 22 484 2
15 26 676 2
16 38 1444 2
17 88 7744 2
18 109 11881 2
19 173 29929 2
20 212 44944 2
21 235 55225 2
22 264 69696 2
23 3114 9696996 2
24 81619 6661661161 2
分布は以下の通りです。
100万までの数字であれば、その平方数に現れる数字の種類は6~8種類が多く、最多は7種類のようです。ヒストグラムにするとこんな感じ。
df_res |>
filter_out(nums %% 10 == 0) |>
ggplot(aes(x = n_kinds_digits)) +
geom_histogram(
bins = 10,
color = "black",
fill = "grey"
) +
scale_x_continuous(
breaks = 1:10,
minor_breaks = NULL,
expand = expansion(add = 0)
) +
scale_y_continuous(
labels = scales::label_number(big.mark = ","),
expand = expansion(mult = c(0, .1))
) +
theme_bw()df_res |>
ggplot(aes(x = n_kinds_digits)) +
geom_histogram(
bins = 10,
color = "black",
fill = "grey"
) +
scale_x_continuous(
breaks = 1:10,
minor_breaks = NULL,
expand = expansion(add = 0)
) +
scale_y_continuous(
labels = scales::label_number(big.mark = ","),
expand = expansion(mult = c(0, .1))
) +
theme_bw()元の数と平方数に現れる数字の種類を点で表してみます。コラッツ予想の元の数と計算回数なんかもそうですが、こういうのって図示してみると、特徴があったりなかったり規則性が見えそうで見えなかったりで面白いです。
map(
.x = 10^c(3:6),
.f = \(x) {
df_res |>
slice_head(n = x) |>
filter_out(nums %% 10 == 0) |>
ggplot(aes(x = nums, y = n_kinds_digits)) +
geom_point(size = .5) +
scale_x_continuous(
limits = c(1, x),
breaks = c(1, seq(x/10, x, length.out = 10))
) +
scale_y_continuous(
limits = c(1, 10),
breaks = 1:10,
minor_breaks = NULL
) +
theme_bw() +
labs(title = paste0(
"n: 1 ~ ",
format(x, scientific = FALSE, big.mark = ","),
" (without ending in 0)"
))
}
)map(
.x = 10^c(3:6),
.f = \(x) {
df_res |>
slice_head(n = x) |>
ggplot(aes(x = nums, y = n_kinds_digits)) +
geom_point(size = .5) +
scale_x_continuous(
limits = c(1, x),
breaks = c(1, seq(x/10, x, length.out = 10))
) +
scale_y_continuous(
limits = c(1, 10),
breaks = 1:10,
minor_breaks = NULL
) +
theme_bw() +
labs(title = paste0(
"n: 1 ~ ",
format(x, scientific = FALSE, big.mark = ",")
))
}
)Conclusion
というわけで、2種類以下の数字で構成されていて、かつ0で終わらない平方数は意外にも少ないらしいという話でした。数の不思議って面白いですね。もっと桁数を増やしてみたいとは思ったんですが、判定処理にも描画処理にも時間がかかるのでやめました。もっと効率がいいコードが書けるようになりたいです。
あとtibbleがbigz/qクラスと相性が悪いのと、ggplotがbigzクラスをそのまま扱ってくれないのは勉強になりました。組み込みのdata.frameとかplotだとそのままでも平気なので、改めて組み込み関数を勉強する必要性を感じました。特にplot関係は全く覚えられていないので、そのうち気合を入れて勉強したいです。
'data.frame': 1000000 obs. of 3 variables:
$ nums : 'bigz' raw 1 2 3 4 ...
$ powers : chr "1" "4" "9" "16" ...
$ n_kinds_digits: int 1 1 1 2 2 2 2 2 2 2 ...
わるくないかも。
Session Infomation
R version 4.5.3 (2026-03-11 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26100)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=Japanese_Japan.utf8 LC_CTYPE=Japanese_Japan.utf8 LC_MONETARY=Japanese_Japan.utf8
[4] LC_NUMERIC=C LC_TIME=Japanese_Japan.utf8
time zone: Asia/Tokyo
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] gmp_0.7-5.1 lubridate_1.9.5 forcats_1.0.1 stringr_1.6.0 dplyr_1.2.1 purrr_1.2.2
[7] readr_2.2.0 tidyr_1.3.2 tibble_3.3.1 ggplot2_4.0.3 tidyverse_2.0.0
loaded via a namespace (and not attached):
[1] gtable_0.3.6 jsonlite_2.0.0 compiler_4.5.3 tidyselect_1.2.1
[5] systemfonts_1.3.2 scales_1.4.0 textshaping_1.0.5 png_0.1-9
[9] yaml_2.3.12 fastmap_1.2.0 R6_2.6.1 labeling_0.4.3
[13] generics_0.1.4 patchwork_1.3.2 knitr_1.51 htmlwidgets_1.6.4
[17] tzdb_0.5.0 pillar_1.11.1 RColorBrewer_1.1-3 rlang_1.2.0
[21] utf8_1.2.6 stringi_1.8.7 xfun_0.57 ViewPipeSteps_0.1.0
[25] S7_0.2.2 otel_0.2.0 timechange_0.4.0 cli_3.6.6
[29] withr_3.0.2 magrittr_2.0.5 digest_0.6.39 grid_4.5.3
[33] rstudioapi_0.18.0 hms_1.1.4 lifecycle_1.0.5 vctrs_0.7.3
[37] evaluate_1.0.5 glue_1.8.1 farver_2.1.2 ragg_1.5.2
[41] pacman_0.5.1 rmarkdown_2.31 tools_4.5.3 pkgconfig_2.0.3
[45] htmltools_0.5.9
Footnotes
オンライン整数辞典 https://oeis.org/A018884↩︎
tibble and gmp #1669 (Github, tidyverse/tibble) https://github.com/tidyverse/tibble/issues/1669↩︎










