裏 RjpWiki

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

探索を逆方向から攻める(2)

2015年03月23日 | ブログラミング

探索を逆方向から攻める」は不完全であった。条件を満たす最小の整数を漏らしていた。

b = 0.111111 * 1:9 # b は 0.111111 ~ 0.999999 の 9 種類
b2 = 2 * b
b.sq = b^2
n = 1e+05 # 探索範囲上限
for (a in 1:n) {
  x = a * b2 + b.sq # 求める整数から a^2 を引いたものの近似値
  if (any(abs(round(x) - x) < 1e-05)) { # round(x) が実際の求めるべき整数から a^2 を引いたもの(チェックを緩めた)
    index = which.min(abs(round(x) - x))
    y = sqrt(round((a + b[index])^2)) # 実際に平方根をとって,小数点以下に 6 個の数字が並ぶかをチェックする
    z = unlist(strsplit(as.character(y), ""))
    if (any(grepl("\\.", z))) {
      i = which(z == ".")
      u = z[(i + 1):(i + 6)] # 小数点以下 6 桁を取り出す
      if (all(u[1] == u)) { # 全部同じか
        options(digits=15)
        cat("sqrt(", round((a + b[index])^2), ") =", y, "\n")
        break
      }
    }
  }
}

実行結果

sqrt( 48273160 ) = 6947.88888800044

実行時間は,0.052 秒であった。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« sample 関数 | トップ | 分数の計算(和) »
最新の画像もっと見る

コメントを投稿

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