0x03F566ED27179461ULLの求め方
これ凄いですね。まだC言語勉強し始めて良く分からない部分も多いですが、なんとなくイメージは付きました。
0x03F566ED27179461ULLは6ビットのパターンが全部網羅されている数値になるわけですが、これを求めるための処理を勉強がてら書いてみました。
#include <stdio.h> typedef unsigned long long u64; int main (void) { u64 table[64] = {0}; u64 i = 120UL; u64 j; int flag = 1; for(j=288230376151711744ULL;j<18302628885633695744ULL;j++) { flag = 1; for(i=0;i<64;i++){ int index = (j<<i) >> 58; if ( table[index] == j ) { flag = 0; break; } table[index] = j; } if ( flag ) { // 見つけた! printf("%lld\n",j); } } printf("end\n"); return 0; }
単純に0000010000000000000000000000000000000000000000000000000000000000から1111111000000000000000000000000000000000000000000000000000000000までの数値をループして計算してます。
実装してみたものの、恐ろしくて実行はできませんでした(笑)
実際もっとうまい方法はあるんだろうか。6ビットのパターンが64通りなので全組み合わせを検証しようと思ったら64の階乗になるのかな?
64の階乗て・・・。天文学的数値だよ。
ちなみに0x03F566ED27179461ULLの値から±1億くらいの範囲でループして確認したところ、同じように6ビット網羅してる数値をいくつか発見しました。
3F566ED2138BCA3 3F566ED213945E3 3F566ED2139462F 3F566ED213978A3 3F566ED2144E5E3 3F566ED2146272F 3F566ED21789CA3 3F566ED217944E3 3F566ED21794627 3F566ED227185E5 3F566ED227285E3 3F566ED2272F185 3F566ED2284E5E3 3F566ED22F184E5 3F566ED22F284E3 3F566ED2309C5E5 3F566ED2309CBC5 3F566ED230BC4E5 3F566ED231385E5 3F566ED2313942F 3F566ED23139785 3F566ED2314272F 3F566ED231784E5 3F566ED23179427 3F566ED2708C5E5 3F566ED270BCA31 3F566ED2710BCA3 3F566ED271185E5 3F566ED27179423 3F566ED27179461 3F566ED271845E5 3F566ED27185E51 3F566ED272845E3 3F566ED2728462F 3F566ED27285E23 3F566ED272885E3 3F566ED2728BC61 3F566ED2728C2F1 3F566ED2728C42F 3F566ED2728C5E1 3F566ED272F08C5 3F566ED272F0A31 3F566ED272F10A3 3F566ED272F1185 3F566ED272F1423 3F566ED272F1461 3F566ED272F1845 3F566ED272F1851 3F566ED2845E4E3 3F566ED28462F27 3F566ED284E2F23 3F566ED284E45E3 3F566ED284E462F 3F566ED285E2723 3F566ED285E44E3 3F566ED285E4627 3F566ED285E4E23 3F566ED2885E4E3 3F566ED289C6179 3F566ED289C85E3 3F566ED28BC6139 3F566ED28BC84E3 3F566ED28BC9C61 3F566ED28C27179 3F566ED28C2F139 3F566ED28C2F271 3F566ED28C42F27 3F566ED28C4E179 3F566ED28C4E42F 3F566ED28C5E139 3F566ED28C5E427 3F566ED28C5E4E1
まさしく「でっていう」ですね。