コラッツ型写像 \(T(n) = (xn+1)/2^d\) の m4/m6 ペア述語分解に基づく走査・解析ツール。 論文「コラッツ型写像 \((xn+1)/2^d\) のペア述語分解と \(3n+1\) の構造的閉鎖性」の アルゴリズム 7.1 の実装であり、以下の機能を提供する。
| パラメータ \(x\) | \(s = \log_2(x-1)\) | 参照パターン | 状態 |
|---|---|---|---|
| 3 | 1(奇数) | ref_R=(a[i-1], b[i]), ref_L=(b[i], a[i]) | 専用最適化あり |
| 5 | 2(偶数) | ref_R=(b[i-1], b[i]), ref_L=(a[i-1], a[i]) | 専用最適化あり |
| 9 | 3(奇数) | 汎用パターン | 汎用ルーチン |
| 17 | 4(偶数) | 汎用パターン | 汎用ルーチン |
| 33, 65, 129, … | 5, 6, 7, … | 汎用パターン | 汎用ルーチン |
制約: \(x \geq 3\) かつ \(x-1\) が2の冪であること。
src/ ├── lib.rs # クレートルート(公開API定義) ├── main.rs # CLI エントリポイント ├── gui.rs # GUI エントリポイント(egui) ├── pair_number.rs # PairNumber 型(m4/m6 ビットペア表現) ├── reference.rs # 参照パターン(表3.1の実装) ├── scan.rs # 1ステップ走査(GPK分類含む) ├── postprocess.rs # 後処理(MSBトリミング、末尾ゼロ除去、再ペア化) ├── trajectory.rs # 軌道追跡・停止時間計算 └── verify.rs # 区間並列検証(rayon)
入力 n (BigUint)
│
├─ [軌道追跡パス] ─── PairNumber 変換 → scan::collatz_step → postprocess → 記録
│ (各ステップの m4/m6, GPK 列, d を保持)
│
└─ [停止時間パス] ─── u128 直接演算 → BigUint フォールバック
(PairNumber を経由せず高速演算、GPK はビット抽出で計算)
| 軌道追跡パス | 停止時間パス | |
|---|---|---|
| 用途 | 単発解析(GUI 単発タブ) | 区間検証(GUI 区間タブ) |
| 内部表現 | PairNumber (Vec<u8> per bit) | u128 / BigUint 直接演算 |
| GPK 取得 | scan 関数の副産物(各ペアの GPK 列) | ビット列から直接計算(統計のみ) |
| 出力 | 全ステップの n', d, GPK 列 | 停止時間 + GPK 集約統計 |
| 速度 | 遅い(研究用詳細データ) | 高速(大量検証用) |
stopping_time_u64_fastu64 入力に対する最適化パス。
current * x + 1 を u128 で計算trailing_zeros() で \(d\) を取得、右シフト(u128::MAX - 1) / xBigUint::*=, +=, >>= によるインプレース演算to_bytes_le() からビット抽出stopping_time_with_gpkBigUint 入力に対する汎用パス。Phase 2 と同一ロジック。
| 制限 | 値 | 目的 |
|---|---|---|
| MAX_PAIR_COUNT | 10,000 ペア | 軌道追跡パスのメモリ制限 |
| MAX_BIT_LENGTH | 20,000 ビット | 停止時間パスのビット長制限 |
| max_steps | GUI で設定可能 | 発散系列の打ち切り |
各ペア位置 \(i\) について、参照パターンに基づく4ビット \((p_r, q_r, p_l, q_l)\) から:
m6段: g_mid = p_r & q_r, p_mid = p_r ^ q_r
m4段: g_out = p_l & q_l, p_out = p_l ^ q_l
直列合成: G_i = g_out | (p_out & g_mid)
P_i = p_out & p_mid
K_i = それ以外
初期キャリー \(c=1\) からの連鎖と、G で再生成された後の連鎖の最大長を記録。 ヒストグラム(距離 0–127)として集約。
| \(3n+1\) | \(5n+1\) | \(17n+1\) | |
|---|---|---|---|
| G% | 38.41 | 36.91 | 37.26 |
| P% | 28.32 | 25.45 | 25.09 |
| K% | 33.26 | 37.64 | 37.65 |
| G/K 比 | 1.15 | 0.98 | 0.99 |
| 要素 | 説明 |
|---|---|
x = | \(xn+1\) のパラメータ。\(x-1\) が2の冪の値のみ受理 |
max_steps: | 最大反復ステップ数。デフォルト 10000 |
| タブ切替 | 単発解析 / 区間解析 / 解析 |
output/ ディレクトリのログファイル一覧を表示exe と同一ディレクトリの output/ フォルダ(自動作成)。
gui_trace_{x}n1_{n}[_stopped]_{timestamp}.txt # 軌道追跡サマリ
gui_trace_{x}n1_{n}.csv # 軌道追跡 CSV
gui_verify_{x}n1_{start}-{end}[_stopped]_{timestamp}.txt # 区間検証サマリ
# collatz-m4m6 verify range = [3, 9999999] x = 5 total_checked = 4999999 all_converged = false max_stopping_time = 490 max_stopping_time_n = 4580349 # GPK G = 17746659852 P = 12236187544 K = 18094218711 total_pairs = 48077066107 total_steps = 897149444 G% = 36.9129 P% = 25.4512 K% = 37.6359 # Carry chain histogram 0: 720342 1: 1400349 ... elapsed = 79.0672604s
step,n,d,digits,gpk,G,P,K,max_carry_chain 0,27,0,2,,0,0,0,0 1,41,1,2,PGP,1,2,0,2 ...
# build_gui.ps1 を使用 $env:PATH = "C:\msys64\mingw64\bin;C:\Users\ykihi\.cargo\bin;" + $env:PATH cargo build --release --features gui --bin collatz-gui
target\release\collatz-gui.exe
| \(x\) | 時間 | nums/s | 平均 steps/数 |
|---|---|---|---|
| 3 | 0.49s | 10,200,000 | 3.5 |
| 5 | 79s | 63,300 | 179 |
| 17 | 1654s | 3,020 | 456 |
| バージョン | 手法 | 5n+1 (\(n \leq 10^6\)) 速度 |
|---|---|---|
| v0.1 | PairNumber + BigUint 変換/ステップ | 46ms/数 (92数/5.65s) |
| v0.2 | BigUint 直接演算 + u128 高速パス | 8μs/数 (499,999/4s) |
| 改善倍率 | 約 5,750倍 |
output/ 内の .txt ファイルのみ対応。CSV の直接閲覧は未実装