(無題) 投稿者:turbo  投稿日:12月30日(火)22時46分59秒

> moemoe さん
2^51517-1 と 2^51563-1 はこちらにも来ていますがそのようなことは起こっていないようです。

 <気づいたこと>
・再び、同じ数字を複数のクライアントに配布するようになったのでしょうか?
・moemoe さんの示された4つの数字には、(回数) = n + 639279 が厳密に成り立っています。

> Kanbayashi さん
お褒めいただきありがとうございます。
掲示板のログの件、了解しました。

数論ですか。私も頑張ってみようと思います。
コラッツの問題は複雑系も絡んでいるので、そちらからも攻めてみます。

「その2」の訂正を2つ。
・ k' および n' は ' を取って考えてください。
・「(k, n) : (k0, n0)(中略).. (1, 1)」とありますが、最後のは (0, 1) の間違いです。
  (k, n)=(0, 1) は1→4→2→1のループに相当します。

http://www.geocities.jp/turbo_us_p/


一般の数にも適用(その2) 投稿者:turbo  投稿日:12月29日(月)19時24分19秒

  (前レスより続く)

(2k+1)*2^n-1 → (2k+1)*3^n-1 を計算機に反映させてみました。
n=1 の場合はかえって計算が多くなりますが、全体としては高速化しているはずです。

1. 初期値 x = 3^n-1 を用意(x は必ず偶数)。
2. 2進数で最下位が0である限り右シフト( x / 2^a = (2k+1)*2^n-1 、k,n が新しくなる)。
3. x=1 ならば終了。
4. 2進数で最下位が1である限り右シフト。シフトした桁数は n に等しいので記憶する( x=2k' )。
5. 1を足す( x=2k+1 )
6. 3^n をかける( x=(2k+1)*3^n )
7. 1桁右シフト( (2k+1)*3^n-1 は偶数なので無条件で1桁右シフトされる。-1 をする手間が省ける)。
8. 2番へ戻る。

計算機の場合、6番の計算をいかに早く行うかが問題になります。
これには 3^n を作るアルゴリズムが役に立ちます。
3のべき乗の値については、
3^1, 3^2, 3^4, 3^8, ......
というふうに、3^(2^m) の値を全て配布するのはどうでしょうか?
配列を使って c[m] = 3^(2^m) を常時用意しておけば2乗の計算を省略できます。
多くの場合は m=(0,)1,2,3 くらいで十分でしょうけど。

一般の数式のままで扱う場合は2番が難問です。a を求める式は以下のようになります。
  (2k+1)*3^n-1 ≡ 2^a (mod 2^(a+1))
( (2k+1)*3^n-1 を 2^(a+1) で割ったとき、余りが 2^a となるような自然数 a )
また、a をうまく求められたとしても、k', n' を求める方法が手ごわいです。
うまくクリアできれば、
(k, n) : (k0, n0) → (k1, n1) → (k2, n2) → ...... → (1, 1)
というふうに k, n の計算を行っていけばいいことになります。

あと、計算中の数の (k, n) が以前に計算していたものと同じであれば、
それ以降も同じ(1に収束する)と分かるので計算を打ち切れます。
ただし、膨大な k, n の値を蓄積しておく必要があり、このままでは実用化は難しいと思われます。


過去の記事がどんどん下がっていることと、長文化が進んでいるため、コラッツの問題に関するサイトを立ち上げました。
理論については概要だけ掲示板でお知らせして、詳細はここにUPしていこうかと思います。

http://www.geocities.jp/turbo_us_p/


一般の数にも適用(その1) 投稿者:turbo  投稿日:12月29日(月)19時17分56秒

レス遅れましてすいません。

sk_3141592 さんの証明を応用して k*2^n-1 → k*3^n-1 の証明もできます(k は任意の自然数)
数学的帰納法(もどき)を使って
n が自然数ならば k*2^n-1 は奇数であるから *(3/2)+(1/2) (以下、奇数操作と呼ぶ)の1回操作が可能。
  (3*(k*2^n-1)+1)/2 = (k*3*2^n-2)/2 = k*3*2^(n-1)-1
もし m 回連続の奇数操作が可能なとき、これを行うと(m は自然数)
  k * 3^m * 2^(n-m) -1
n-m ≧ 1 ならば k*3^m*2^(n-m)-1 は奇数でありさらに1回操作が可能である。
n-m = 0 ならばそれ以上続けて操作できるかどうかは分からなくなる(k の値による)。
以上のことから、k*2^n-1 は少なくとも n 回連続で奇数操作が可能。
よって
  k*2^n-1 → k * 3^n * 2^(n-n) -1 = k*3^n-1
が示された。■

ここで k が奇数の場合を考える。k を新しく 2k+1 とおく。
  (2k+1)*2^n-1 → (2k+1)*3^n-1
(2k+1)*3^n-1 は偶数であるからここで必ず奇数操作の連続は止まる。
よって、(2k+1)*2^n-1 には n 回連続の奇数操作が行われ、その後偶数に転じる。
(これは、n が有限であれば連続の奇数操作も有限回であることも意味します)

ところで、
  (2k+1)*2^n-1 = k*2^(n+1) + 2^n-1
である(ここでは k=0 の場合がメルセンヌ数)。
任意の奇数は上の形で表現でき、そのときにとる k, n とは1対1の対応を成す(詳しい証明は略)。
(2進数表示では、下から n 桁連続で1、その上の桁は0、それより上の桁は2進数表示における k に相当)

これらの証明を総合すると
  任意の奇数 (2k+1)*2^n-1 は (2k+1)*3^n-1 にワープできる
ということになります。
これは 3^n-1 通過の後の処理の短縮化につながります!

  (次レスに続く)


BACK TOP