裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

コラッツの問題(2)

2014年11月06日 | ブログラミング

単純に,10 進数一桁を要素とするベクトルを使って,掛け算も,割り算も,自前でやるプログラムを書く。10 進数は,1 の位が添え字 1 になるように(逆順)にすると,プログラムが書きやすい。

途中経過をプリントするのを含めて,余裕の 24 行だ。

n = rep(9, 50)
print(sub("^0*", "", paste(rev(n), collapse="")))
repeat {
  if (n[1] %% 2 == 1) {
    n = 3 * n
    n[1] = n[1] + 1
    carry = 0
    for (i in seq_along(n)) {
      n[i] = n[i] + carry
      carry = n[i] %/% 10
      n[i] = n[i] %% 10
    }
  } else {
    borrow = 0
    for (i in rev(seq_along(n))) {
      n[i] = borrow * 10 + n[i]
      borrow = n[i] %% 2 == 1
      n[i] = n[i] %/% 2
    }
  }
  string = sub("^0*", "", paste(rev(n), collapse=""))
  print(string)
  if (string == "1") break
}

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« コラッツの問題 | トップ | フィボナッチ数列の各項下3桁... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事