東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

コラッツ予想

「ある整数が偶数なら2で割り、奇数なら3倍して1足す」
この操作を何度も繰り返すとどんな整数でもいつかは1にたどりつく。

って予想があります。コラッツ予想とか角谷予想とか言われてます。

整数nに対し上記操作を何回やれば1になるか、
その回数を返す関数を collatz(n) としましょうか。
たとえば:
3→10→5→16→8→4→2→1(7回) なので collatz(3) = 7 です。

collattz(n)が大きな値となるnを、ちょいちょいとコード書いて走らせてます。
目下のところ collatz(226588897) = 956 を見つけました。
無限の桁を持つ整数クラスがあるなら、時間さえかければいくらでも大きな
やつが見つかると思うけど、いまんとこ(30分ブン回し)ここらが限界かしら。

ぃゃだからどーしたってことはなく、ぢみに面白いなー、と。

[追記] 一晩回しっぱにして collatz(537099606) = 965 。

回しっぱにしてるのはコレ↓ 凝ったマネはしてましぇん。

#include <iostream>
#include <cassert>

typedef unsigned long long  integer;

integer collatz(integer n) {
  integer count = 0;
  while ( n != 1 ) {
    if ( n % 2 ) {
      integer t = n * 3 + 1;
      assert( t > n ); // over-flow除け
      n = t;
    } else {
      n >>=1 ;
    }
    ++count;
  }
  return count;
}

int main() {
  integer max = 0;
  for ( integer n = 2; n != 0; ++n) {
    integer result = collatz(n);
    if ( max <= result ) {
      std::cout << "collatz(" << n << ") = "
          
<< result << std::endl;
      max = result;
    }
  }
}

投稿日時 : 2007年3月2日 17:38

コメントを追加

# re: コラッツ予想 2007/03/03 1:46 なちゃ

collattz(55780)=10000
collattz(173668)=100000
未検算

# re: コラッツ予想 2007/03/03 2:10 なちゃ

collattz(1134316)=500000
やっぱり間違ってるかもしれんから検算してみよう…

# re: コラッツ予想 2007/03/03 2:17 επιστημη

ありゃ?
僕とこではcollattz(55780)=153だと言うてます。
途中でover-flow起こしてなさげだし、んーむ...

# re: コラッツ予想 2007/03/03 2:19 なちゃ

うわやっぱり間違っとったみたいです…やりなおすぃ…

# re: コラッツ予想 2007/03/03 2:19 なちゃ

いや、こっちのミスで、失礼…
なにやらどこかで大きな間違いをしてるようです…

# re: コラッツ予想 2007/03/04 1:57 なちゃ

昨日はおおぼけかましてましたってことで…
今のとこ、
collatz(8758727081610706944)=986
てのが出ました。

# re: コラッツ予想 2007/03/04 2:03 なちゃ

ていうかよく見たらやり方の差なだけで
collatz(537099606) = 965
の方が意味的にははるかに上ですね…あはは

# re: コラッツ予想 2007/03/04 2:18 επιστημη

> collatz(8758727081610706944)=986
いやそれスゴいし。
unsigned-64bitだと途中over-flowしそうだわ。

# re: コラッツ予想 2007/03/04 2:43 επιστημη

あ、なんかわかった気がすゆ。> なちゃサンの手口

collatz(n) = p のとき
collatz(n*2) = p+1 だから、
ある程度大きい n を求めておいて...
ぶっちゃけ collatz(2^n) = n が自明なのだから
計算せずとも collatz(2^百万) = 百万 よねー ^^;

# re: コラッツ予想 2007/03/04 9:27 なちゃ

こっちは逆算方式でやってみました。
1から順に…
とりあえずどんどん2倍。
(n-1)が3で割り切れ、かつ(n-1)/3が奇数なら
そこから再度再起していく感じ。

とりあえず目下のところ
collatz(2746848374784)=998
long(Int64)範囲で倍々でいけるとこまでいくと、
collatz(5760558562875015168)=1019
でした。

# re: コラッツ予想 2007/03/05 14:21 επιστημη

空いたポンコツマシンで三日三晩ぶん回したところ、
collatz(13371194527) = 1210
を見つけてました。

# re: コラッツ予想 2007/03/06 23:01 なちゃ

せっかくなので正攻法に変えてためし。

00:00:00.0005182 1: 2
00:00:00.0571030 7: 3
00:00:00.0571706 8: 6
00:00:00.0572184 16: 7
00:00:00.0572648 19: 9
00:00:00.0573117 20: 18
00:00:00.0573586 23: 25
00:00:00.0574835 111: 27
00:00:00.0575366 112: 54
00:00:00.0575869 115: 73
00:00:00.0576363 118: 97
00:00:00.0576950 121: 129
00:00:00.0577464 124: 171
00:00:00.0577986 127: 231
00:00:00.0578553 130: 313
00:00:00.0579034 143: 327
00:00:00.0580020 144: 649
00:00:00.0581057 170: 703
00:00:00.0581772 178: 871
00:00:00.0582560 181: 1161
00:00:00.0585314 182: 2223
00:00:00.0586018 208: 2463
00:00:00.0587351 216: 2919
00:00:00.0589032 237: 3711
00:00:00.0594340 261: 6171
00:00:00.0605180 267: 10971
00:00:00.0609895 275: 13255
00:00:00.0619419 278: 17647
00:00:00.0631845 281: 23529
00:00:00.0639321 307: 26623
00:00:00.0657720 310: 34239
00:00:00.0663240 323: 35655
00:00:00.0695864 339: 52527
00:00:00.0761378 350: 77031
00:00:00.0851178 353: 106239
00:00:00.1037925 374: 142587
00:00:00.1087758 382: 156159
00:00:00.1305286 385: 216367
00:00:00.1362851 442: 230631
00:00:00.2033283 448: 410011
00:00:00.2420464 469: 511935
00:00:00.2890811 508: 626331
00:00:00.3699232 524: 837799
00:00:00.4741150 527: 1117065
00:00:00.6111963 530: 1501353
00:00:00.6924818 556: 1723519
00:00:00.8915753 559: 2298025
00:00:01.1524752 562: 3064033
00:00:01.3579125 583: 3542887
00:00:01.4195253 596: 3732423
00:00:02.8114447 612: 5649499
00:00:07.0108913 664: 6649279
00:00:09.0467796 685: 8400511
00:00:09.8824945 688: 11200681
00:00:10.9878207 691: 14934241
00:00:11.2407197 704: 15733191
00:00:15.6078834 705: 31466382
00:00:16.9765908 744: 36791535
00:00:27.2501678 949: 63728127
00:00:53.9287593 950: 127456254
00:01:11.0242120 953: 169941673
00:01:28.6401542 956: 226588897
00:01:40.1767244 964: 268549803
00:03:16.3722735 965: 537099606
00:04:31.1131747 986: 670617279
00:13:34.0588197 987: 1341234558
00:14:38.4614483 1000: 1412987847
00:18:43.2983233 1008: 1674652263
00:35:41.4157536 1050: 2610744987
01:17:15.5453539 1087: 4578853915
01:24:14.4404283 1131: 4890328815
03:30:47.9554150 1132: 9780657630
04:38:30.6419332 1153: 12212032815
04:39:09.8056512 1184: 12235060455
05:11:46.0892540 1210: 13371194527
07:25:15.8579246 1213: 17828259369
14:57:12.9436917 1219: 31694683323

とりあえず24時間までは粘ってみよう…

# re: コラッツ予想で 2016/11/30 20:04 まっちゃです

どんだけ求めたとしても、
証明しなけりゃ意味ないんだよな~w

タイトル  
名前  
URL
コメント