Hatena::ブログ(Diary)

もうカツ丼でいいよな このページをアンテナに追加 RSSフィード Twitter

2009 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 04 | 05 | 06 | 07 | 08 | 09 | 12 |
2012 | 02 | 03 | 04 | 05 | 06 | 10 | 11 | 12 |
2013 | 01 | 02 | 04 | 06 |
2014 | 06 |

2011-05-29

[][] Problem 141 18:36  Problem 141を含むブックマーク  Problem 141のブックマークコメント

no title

整数nをdで割ったときの商をq、余りをrとおく。このとき、d, q, rが幾何級数の正整数の連続した項となるような場合がある(d, q, rの順序は入れ替えても良い)。

例えば、58を6で割ると9余り4となるが、4, 6, 9は公比3/2の幾何級数の連続した項である。このような数nをprogressive数と呼ぼう。

progressive数のうちいくつか、例えば9や10404(102^2)などは平方数でもある。10^5未満の平方数であるprogressive数の総和は124657である。

10^12未満の平方数かつprogressive数であるような数の総和を求めよ。

続きを読む

[][] Problem 140 00:44  Problem 140を含むブックマーク  Problem 140のブックマークコメント

no title

無限級数を考える。

ここで、で、である。これに従うと1, 4, 5, 9, 14, 23,...のような数列ができる。

この問題では、が正整数となるようなxについて考える。

自然数となるxのうち最初の5つを示すと次のようになる。

x
1
2/5 2
3
4
1/2 5

xが有理数となるようなの値をgolden nuggetと呼ぼう。golden nuggetは数が大きくなるに従い珍しくなっていく。例えば、20番目のgolden nuggetは211345365である。

最初の30個のgolden nuggetの総和を求めよ。

続きを読む

2011-05-21

[][] Problem 139 15:47  Problem 139を含むブックマーク  Problem 139のブックマークコメント

no title

(a, b, c)を各辺の長さが整数であるような直角三角形の各辺の長さとする。このとき、この直角三角形を4つ組み合わせることで、直角三角形の長辺cを1辺の長さとする正方形を作ることができる(上記問題文リンク先参照)。

例えば、(3, 4, 5)の三角形は5×5のサイズの正方形を作る。このとき、中央に1×1サイズの正方形の穴ができるが、この正方形を用いて元の5×5の正方形を敷き詰めることができる。

しかし、(5, 12, 13)の三角形の場合は中央の穴は7×7であり、13×13の正方形を敷き詰めることはできない。

周囲長が1億未満である直角三角形のうち、このような敷き詰めが可能なピタゴラス三角形はいくつあるか。

続きを読む

[][] Problem 138 13:55  Problem 138を含むブックマーク  Problem 138のブックマークコメント

no title

底辺bの長さが16、斜辺Lの長さが17の二等辺三角形を考える。

ピタゴラスの定理によれば、この二等辺三角形の高さhはと求められる。この場合hはbよりも長さが1だけ短い。

b = 272, L=305とすると、h = 273であり、hはbより1だけ長い。また、これはとなるような二等辺三角形のうち2番目に小さいものである。

, b, Lが全て正整数であるとし、小さいものから12個の二等辺三角形についてを求めよ。

続きを読む

2011-05-15

[][] Problem 137 21:46  Problem 137を含むブックマーク  Problem 137のブックマークコメント

をk番目のフィボナッチ数(, , からなる数列で、1, 1, 2, 3, 5, 8, ...)として、無限級数を考える。

この問題では、の値が正整数となるようなxについて考える。

驚くべきことに、である。

最初の5つの自然数に対するxの値は次のようになる。

1
2
3
4
5

xが有理数であるようなときのは数を増すごとに稀な物となっていくため、golden nuggetと呼ぶ。例えば、10番目のgolden nuggetは74049690である。

15番目のgolden nuggetを求めよ。

続きを読む

[][] Rでエラトステネスの篩 15:49  Rでエラトステネスの篩を含むブックマーク  Rでエラトステネスの篩のブックマークコメント

すごい暇だったのでエラトステネスの篩(Sieve of Eratosthenes)分かる範囲で調べてみようと思った。

数学において、エラトステネスの篩(エラトステネスのふるい)は、指定された整数以下の全ての素数を発見するための単純なアルゴリズムである。古代ギリシア科学者、エラトステネスが考案したとされるため、この名がある。(エラトステネスの篩 - Wikipedia)

アルゴリズムの詳細についてはWikipediaを見てもらうか他の人の説明を検索してもらった方が良いと思うけど一応簡単におさらい。

  • E1(リストの用意) 2以上N以下(Nは目的とする範囲の上限)の整数をリストに追加。
  • E2(フラグの用意) リスト中全ての整数について「素数であるフラグ」を立てる。
  • E3(リストの走査) リストの値が小さいものから順にフラグを調べる
    • E3.1(終了条件) もし今見ているリストの数字がより大きければ終了。リスト中のフラグが立っている値が素数である。
    • E3.2(合成数の除去) もし素数フラグが立っていたら、その値の整数倍(2倍以上のもの)の数全てのフラグをOFFにする。E3に戻る。

素直に実装する

上述のアルゴリズムをそのままRで実装するとこんな感じになる。

### version 1
## 普通に定義通りに
sieve1 <- function(limit = 1e6, return = FALSE){
  sieve <- logical(limit)
  sieve[1] <- TRUE                      # 非素数はTRUEで表す
  for(i in 2:sqrt(limit)){              # 上限の平方根まで探す
    if(!sieve[i]){                      # 素数なら
      sieve[seq(i*2, limit, by=i)] <- TRUE # その倍数を取り除く
    }
  }
  prime <- (1:limit)[!sieve]
  if(return) prime
}

logical()は初期値がFALSEなのでFALSEをフラグONとみなしている以外はほとんどそのまんま書いてあるようなもの。sieve1(100, TRUE)とすれば100以下の素数ベクトルで返ってくる。

1000万以下を探索範囲とすると大体3秒くらいで返ってくる(OS:Mac OSX, プロセッサ: 2.26 GHz Intel Core 2 Duo, メモリ: 4 GB 1067 MHz DDR3)。

そもそもエラトステネスの篩は早いので、普通に使う程度の素数(?)なら今みたいに適当に書いたって十分使える。

ちょっと工夫する

そのまんま実装するとちょっと無駄がある。例えば2を除けば素数奇数なのだから、初めから奇数のみ調べるようにしたらいい。また、小さい方の値から調べていっているのだから、素数pの整数倍のうち、p*pより小さなものは既にフラグがオフになっている。フラグをオフにする際のループはp*pよりスタートすればよい。

というわけでちょっと無駄を省いて実装すると、こんな感じになる。

### version 2
## やや改良
sieve2 <- function(limit = 1e6, return = FALSE){
  sieve <- logical(limit)
  sieve[1] <- TRUE
  sieve[seq(4, limit, by=2)] <- TRUE    # 4以上の偶数を取り除く
  for(i in seq(3, sqrt(limit), by=2 )){ # 奇数だけ探す
    if(!sieve[i]){
      ## i^2より小さな非素数はiより小さい約数を持つので
      ## すでにリストから外れている => 探索はi^2から
      ## i^2は奇数、i^2+iは偶数、i^2+2iは奇数...
      ##  => 偶数は既に外れているのでステップは2iずつで良い
      sieve[seq(i^2, limit, by=i*2)] <- TRUE
    }
  }
  prime <- (1:limit)[!sieve]
  if(return) prime
}

1000万までの素数をおおよそ2秒で求められる。

もうちょっと工夫する

さっきは2の倍数を調べないという方策をとったが、それならいっそ2の倍数のフラグを用意しなければいい。そうすればメモリも有効活用できる。添字と値の関係に注意して実装するとこんな感じ。

### version 3
## 2の倍数を最初から除く
sieve3 <- function(limit = 1e6, return =  FALSE){
  ## 2i + 1 = nとし、3から開始する
  sieve <- logical((limit-1)/2)         # 1を除く数の半分が上限
  for(i in 1:(floor(sqrt(limit)-1)/2)){
    if(!sieve[i]){
      ## 数nのindexは(n-1)/2で求められる
      ## n = 2i + 1 なので n^2 = 4i^2 + 4i + 1, そのindexは
      ## ((4i^2 + 4i + 1) - 1)/2 = 2i(i + 1)
      ## 数xのindexは(x-1)/2
      ## 数xに2nを足すと、x + 2n = x + 4i + 2、そのindexは
      ## ((x + 4i + 2) - 1)/2 = (x -1  + 4i + 2)/2 で2i+1増えてる
      ## よって2nを足すごとにindexは2i + 1ずつ増える
      sieve[seq(2*i*(i+1), length(sieve), by = 2*i+1)] <- TRUE
    }
  }
  prime <- c(2, (1:length(sieve))[!sieve] * 2 + 1)
  if(return) prime
}

1000万までの素数は1.3秒くらいで求められる。

もっともっと工夫したい

3も素数だし、3の倍数も初めから除いてしまえばいい。そうすると調べるべきはまたはの数のみになる。だいぶメモリが節約できる。

が、Rだと1オリジンだからそのへんに落ちてるソースそのまま使えないし、分岐や条件式が増えるとすぐ重くなるしでどうも今ひとつ。あとseq()がエラー吐くの防ぐためにちょっとその場しのぎでアレなやり方してる。

まあとにかくこんな感じになる。

### version 4
## 2の倍数と3の倍数を最初から除く
sieve4 <- function(limit = 1e6, return =FALSE){
  sieve1 <- logical(limit/5)
  sieve1[1] <- TRUE
  sieve5 <- logical(limit/5)
  slen <- length(sieve1)
  slim <- ceiling(sqrt(limit)/6)
  for(i in 1:slim){
    if(!sieve1[i]){
      p <- 6 * i - 5
        sieve1[seq(6*i^2 - 10*i + 5, slen, by = p)] <- TRUE
        sieve5[seq(6*i^2 - 6*i + 1, slen, by = p)] <- TRUE
    }
    if(!sieve5[i]){
      p <- 6 * i - 1
        sieve1[seq(6*i^2 - 2*i + 1, slen, by = p)] <- TRUE
        sieve5[seq(6 * i^2, slen, by = p)] <- TRUE
    }
  }
  prime <- sort(c(2, 3,
                  seq(1, limit, by = 6)[!sieve1],
                  seq(5, limit, by = 6)[!sieve5]))
  if(return) prime
}

計算速度としてはversion3とほとんど変わらない。範囲が狭いとむしろ遅いくらい。

もっとなんか別の使おう

アトキンの篩(Sieve of Atkin)というのがあって、エラトステネスの篩より高速に動作するらしい。というわけで説明(Spaghetti Source - アトキンのふるい)を読みながら丸写ししてみたけどさっぱり速度がでない。多分条件判定減らすとかしてRに合った実装しないとダメなんだと思う。といって元論文読む能力がないのでmoudameda。

とりあえずこんな感じ。まあそりゃ遅いよなって感じがひしひしと。

### アトキンの篩
atkin <- function(limit = 1e6, return = FALSE){
  isprime <- logical(limit)
  z <- 1
  while(z <= 5){
    y <- z
    while(y <= sqrt(limit)){
      x <- 1
      while(x <= sqrt(limit) && (n <- 4*x*x+y*y) <= limit){
        isprime[n] <- !isprime[n]
        x <- x + 1
      }
      x <- y + 1
      while(x <= sqrt(limit) && (n <- 3*x*x-y*y) <= limit){
        isprime[n] <- !isprime[n]
        x <- x + 2
      }
      y <- y + 6
    }
    z <- z + 4
  }
  z <- 2
  while(z <= 4){
    y <- z
    while(y <= sqrt(limit)){
      x <- 1
      while(x <= sqrt(limit) && (n <- 3*x*x+y*y) <= limit){
        isprime[n] <- !isprime[n]
        x <- x + 2
      }
      x <- y + 1
      while(x <= sqrt(limit) && (n <- 3*x*x-y*y) <= limit){
        isprime[n] <- !isprime[n]
        x <- x + 2
      }
      y <- y + 6
    }
    z <- z + 2
  }
  y <- 3
  while(y <= sqrt(limit)){
    z <- 1
    while(z <= 2){
      x <- z
      while(x <= sqrt(limit) && (n <- 4*x*x+y*y) <= limit){
        isprime[n] <- !isprime[n]
        x <- x + 3
      }
      z <- z + 1
    }
    y <- y + 6
  }
  n <- 5
  while(n <= sqrt(limit)){
    if(isprime[n]){
      k <- n*n
      while(k <= limit){
        isprime[k] <- FALSE
        k <- k + n*n
      }
    }
    n <- n + 1
  }
  isprime[2] <- isprime[3] <- TRUE
  if(return) (1:limit)[isprime]
}

1000万までやろうとすると1分近くかかる。ダメっす。

比べてみよう

1000から1000万までの範囲でそれぞれの方法の計算速度を比べてみるとこんな感じ。単位は秒。

rangesieve1sieve2sieve3sieve4atkin
1e+030.0017333330.0018333330.0015666670.003066667 0.003933333
1e+040.0046666670.0041333330.0038666670.007566667 0.038533333
1e+050.0229666670.0167666670.0133000000.022833333 0.456033333
1e+060.2896000000.1849000000.1201000000.136800000 4.610400000
1e+072.9746666671.8693333331.2816666671.27500000044.410333333

グラフだとこんな感じ。

f:id:Rion778:20110515183332p:image

2の倍数、3の倍数、5の倍数...と飛ばす数を増やしていければ早いし探索範囲も広げられるんだろうけど自分の能力では効率よく実装できなくてなんともかんとも。

ちなみにグラフはこんな感じで書きました。

## グラフ化
r <- c(1e3, 1e4, 1e5, 1e6, 1e7)
rep <- c(30, 30, 30, 10, 3)
fname <- c("sieve1", "sieve2", "sieve3", "sieve4", "atkin")

mean.elap.time <- function(f, index){
  mean(sapply(1:rep[index],
              function(i){
                system.time(eval(call(f, r[index])))[3]
              }))
}

elap.time.list <- function(f){
  sapply(1:length(r), function(i){ mean.elap.time(f, i) })
}

d <- data.frame(
           range = r,
           sieve1 = elap.time.list("sieve1"),
           sieve2 = elap.time.list("sieve2"),
           sieve3 = elap.time.list("sieve3"),
           sieve4 = elap.time.list("sieve4"))
d2 <- data.frame(d,
                 atkin = elap.time.list("atkin"))

matplot(d[, 2:5],
        xaxt="n",
        xlab = "Upper limit",
        ylab = "Elapsed time (sec.)",
        pch = 1, type="l")
axis(1, at=1:5, labels = r)
legend("topleft",
       box.lty=0,
       legend=c("sieve1", "sieve2", "sieve3", "sieve4"),
       lty = 1:4,
       col = 1:4)

dichikadichika 2011/05/16 16:37 本質的な解決法ではありませんが、実装されているアトキンの篩のコードはcompilerパッケージのcmpfun関数でバイトコンパイルすると4倍くらいの速さになりますね。

Rion778Rion778 2011/05/16 18:36 うおおバイトコンパイルできるパッケージがあるなんて知りませんでしたそんな発想すらありませんでした!!非常にためになりますありがとうございます!!!

2011-05-14

[][] Problem 136 20:56  Problem 136を含むブックマーク  Problem 136のブックマークコメント

no title

整数かつ等差数列である3つの数x, y, zと、正整数nについての方程式を考える。n=20のとき、方程式はただ一つの解を持つ。

100未満のnについて、そのうち25個が方程式に対しだた一つの解を持つ。

5千万より小さいnについて、ただ一つの解を持つものがいくつあるか答えよ。

続きを読む

2011-05-08

[][] Problem 135 20:37  Problem 135を含むブックマーク  Problem 135のブックマークコメント

no title

整数x, y, zが等差数列として与えられたとき、方程式が丁度2つの解をもつ最小のnは27である。

1155は丁度10個の解を持つ最小のnである。

百万未満のnのうち丁度10個の解を持つものはいくつあるか?

続きを読む

[] はてダtex記法google chart api02:21  はてダのtex記法をgoogle chart apiにを含むブックマーク  はてダのtex記法をgoogle chart apiにのブックマークコメント

はてなダイアリーのtex記法は綺麗じゃないのでいつもgoogle chart apiを使っている - 糞ネット弁慶読んでたら「Emacsの中で完結させないと…」みたいな義務感がアレしてきてつい*1

適当に書き散らしたdiary.txt編集バッファでM-x latex-to-google-chart-apiしましょう。

参考: Emacs で正規表現 + 関数を使った置換。 - 日々、とんは語る。

*1:本当は前作ったヤツの使い勝手があまりにアレだったので直したかった

2011-05-05

[][] Problem 134 18:36  Problem 134を含むブックマーク  Problem 134のブックマークコメント

no title

連続する2つの素数p1 = 19とp2 = 23を考える。1219は、末尾の桁にp1を含み、かつp2で割り切れるような最小の数である。

実際のところ、p1 = 3, p2 = 5の場合をのぞく全ての連続する素数p2 > p1についてこのような数nが存在する。nのうち最小のものをSとする。

5 ≦ p1 ≦ 1000000であるようなp1の全てについてSを求め、Sの総和を答えよ。

続きを読む

[] ユークリッドの互除法とその拡張 17:51  ユークリッドの互除法とその拡張を含むブックマーク  ユークリッドの互除法とその拡張のブックマークコメント

ユークリッドの互除法

まずはユークリッドの互除法について確認。

ユークリッドの互除法は2つの正整数最大公約数をもとめる手法。

2つの正整数をm, nとする

  • E1. mをnで割った剰余をrとする
  • E2. rが0に等しければ終了。nが最大公約数である。
  • E3. m <- n、n <- rとしてE1に戻る。

ここで<-は代入操作を表す記号とする。

拡張されたユークリッドの互除法

2個の正整数m, nについて、その最大公約数がdであるとする。

このとき、2個の整数a, bを用いて

am + bn = d

という式を成立させることができる。

拡張ユークリッドの互除法最大公約数dだけでなく、上式における係数a, bを同時に求める。

  • E'1. a <- 0, a' <- 1, c <- m, b <- 1, b' <- 0, d <- n
    • a, a', b, b'の値はam+bn=d, a'm+b'n=cが成立するように選ばれている
  • E'2. cをdで割った商をq, 余りをrとする
  • E'3. r = 0なら終了。dは最大公約数であり、式am+bn=dは成立したままなのでa, bの値を参照すればよい。
  • E'4-1. c <- d, d <-r
    • ユークリッドの互除法におけるE3の手順と同様。
    • cとdが変更されたので、等式am+bn=d, a'm+b'n=cが成立するように各係数を変更する必要がある。
    • cにdを代入したので、a'm+b'n=cを成立させるにはa'にaを、b'にbを代入すればよい
    • dにrを代入したので、am+bn=dを成立させるにはaにa'-qaを、bにb'-qbを代入すればよい(※)
    • 上述の代入を一度に行うには、一時変数tを用意して
  • E'4-2. t <- a', a' <- a, a <- t - qa, t <- b', b' <- b, b <- t - qb
    • 代入後、E2へ戻る。

※部分の解説

(各変数はE'4-1の代入を行う前の値とする)

  • r = c - qdと表せるので、d = (c-r)/q
  • am + bn = dに代入して、am + bn = (c-r)/q
  • 整理して -qam - qbn + c = r
  • a'm + b'n = cを代入して整理すると(a'-qa)m + (b'-qb)n = r

参考

2011-05-04

[][] Problem 133 21:56  Problem 133を含むブックマーク  Problem 133のブックマークコメント

no title

1のみからなる数(1, 11, 111, ...)をrepunitと呼び、k桁のrepunitをR(k)と表す。

R()について考える。

R(10), R(100), R(1000)は17で割り切れないが、R(10000)は17で割り切れる。一方、どのようなnをもってきてもR()を19で割り切ることはできない。驚くべきことに、100未満の素数のうちR()の因数となるものは11, 17, 41および73しかない。

100,000未満の素数のうち、R()の因数となりえない数の総和を求めよ。

続きを読む

2011-05-03

[] EmacsフォントをRictyにした 22:55  EmacsのフォントをRictyにしたを含むブックマーク  EmacsのフォントをRictyにしたのブックマークコメント

Rictyというフォントが話題になっていたのでEmacsフォントに設定してみた。

Mac OS X 10.6.7、Emacs 23.2.1(ただEmacsどうやって入れたんだったか今ひとつ思い出せない…)。

フォントプログラミング用フォント Rictyからダウンロードしてきてインストール

.emacsには

;; Ricty {{{2 (http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html)
(set-face-attribute 'default nil
                   :family "Ricty"
                   :height 160)
(set-fontset-font
 nil 'japanese-jisx0208
 (font-spec :family "Ricty"))

と書いておいた。前使ってたInconsolataとTakaoゴシックの設定ほぼそのままなので中身の意味はよく分からない。

日本語読みやすくなったけど三点リーダ(…)の幅が半角なのがちょっと気になる。

(2011/5/4 追記) 本日公開されたVersion 2.0.2でInconsolata由来のAmbiguous文字の全角化がされて、三点リーダも全角で表示されるようになった。古いのを一旦消してインストールしなおしたら無事表示された。マメにアップデートされてるしRSSで配信されるしありがたい限りです。

[][] Problem 132 20:54  Problem 132を含むブックマーク  Problem 132のブックマークコメント

no title

1のみからなる数(1, 11, 111, ...)をrepunitと呼ぶ。k桁のrepunitをR(k)で表すことにしよう。

さて、R(10) = 1111111111を素因数分解すると素因数は11, 41, 271, 9091であるから、素因数の総和は9414である。

R()の素因数のうち小さいものから40個の総和を求めよ。

続きを読む

2011-05-01

[] 4月に買った本&読んだ本 12:23  4月に買った本&読んだ本を含むブックマーク  4月に買った本&読んだ本のブックマークコメント

買った(≒積んでる)

病害虫・雑草防除の基礎 (農学基礎セミナー)

病害虫・雑草防除の基礎 (農学基礎セミナー)

養液栽培の新マニュアル

養液栽培の新マニュアル

この本は昔持ってたけど引越しの時勢い余って売ってしまったのでまた買うハメに…

コラムは全部読みました。

不妊虫放飼法―侵入害虫根絶の技術

不妊虫放飼法―侵入害虫根絶の技術

最新応用昆虫学

最新応用昆虫学

「新応用昆虫学」とかなり雰囲気が違う。分子生物学的な話題がいっぱいでついていけない…

農薬学

農薬学

科学と科学者のはなし―寺田寅彦エッセイ集 (岩波少年文庫 (510))

科学と科学者のはなし―寺田寅彦エッセイ集 (岩波少年文庫 (510))

青空文庫とか除けば寺田寅彦って初めて買う。

VBAエキスパート公式テキスト Excel VBA ベーシック [模擬問題プログラム付き]

VBAエキスパート公式テキスト Excel VBA ベーシック [模擬問題プログラム付き]

この先生きのこるにはVBAしか。

読んだ(今月買ったもの含む)

モグラ博士のモグラの話 (岩波ジュニア新書)

モグラ博士のモグラの話 (岩波ジュニア新書)

すごく面白かったけどモグラの殺し方とかはあまり分からなかったですね。軽い感じの本なのでさっくりと読める。

新版 バナッハ・タルスキーのパラドックス (岩波科学ライブラリー)

新版 バナッハ・タルスキーのパラドックス (岩波科学ライブラリー)

証明は最後にオマケとしてついてるけど証明そのものを解説する本じゃない。BTPの話というよりパラドックスとか選択公理の話が多い。薄いしBTPの証明以外は特に前提知識なしでも読めるし飛ばし気味で読んでもわけがわからなくなったりしないので気楽に読める。面白かった。

農業の現場では制御できない、またははばらつきがきわめて大きいのが当然で制御する利点があまりない環境条件が多く、「母集団」が「その実験をした圃場」となってしまうような場合が多い。そのような現場では「実験科学」が十分に力を発揮できない。そこで著者は川喜田二郎が著書「発想法」のなかで提案した「野外科学」的な方法の重要性を指摘する。

いわゆる「実験科学と農業の現場の間における乖離」が題材になっていて、参考になる考え方を色々と見付けることができる。

ちなみに「発想法」の話題が全体にわたって出てくるが、KJ法を使っているわけではないらしい。

例示は果樹が中心なので少しイメージしにくい部分もあったが、高度に専門的な話題は出てこないので途中で迷子になるようなことはないと思う。

不妊虫放飼による沖縄のウリミバエ根絶というのは昆虫学や農薬学の教科書には必ず載っているような話で、農学に関わる人間ならば詳細こそ知らなくとも単語と概要くらいはどこかで聞いたことがあるのではないだろうか。ウリミバエというのはその名が示すようにウリ類の果実につく害虫のことで、もともと日本にはいなかった。しかし、沖縄本島周辺へこのウリミバエが侵入してしまいそれが原因で沖縄から本土へウリ類を移動できないという事態が長く続いていた(例えば沖縄産のゴーヤ1990年まで持ち出しが禁止されていた。)。

そこでこのウリミバエ根絶のために予算が組まれ、放射線によって不妊化したウリミバエ(用語が紛らわしいが「不妊化」といっても対象は雄)を大量に放飼することで島内のウリミバエの密度を下げ、最終的には根絶に成功した。というのが教科書によく書かれているストーリーで、大抵半ページ程度か良くて表付き3ページといった程度の触れられ方である。

ただ、この事業が開始された当時である1970年代、沖縄県農試にはまだ手廻しの計算機しかないような状況だった。「本土復帰」後の空気を強く残す沖縄においていかにこの歴史的事業が進められて行ったのかを当事者が語るこの本は一読の価値がある。

今のところ入手困難ではないものの既に絶版であるということ、類書がほとんどないということは非常に惜しい。

[] simple-hatena-modeのFontifying... 12:02  simple-hatena-modeのFontifying...を含むブックマーク  simple-hatena-modeのFontifying...のブックマークコメント

simple-hatena-modeで編集してると文字入力したりカーソル移動させたりする度に

Fontifying hoge.txt... (Attributes)

とかなんとか出てきて、特に長いバッファだとまともに編集できないくらいモサモサしてくるので直せないかどうか調べた。

そうしたらどうも原因はsimple-hatena-modeじゃなくてhtml-helper-modeらしい。

hookでどうにかできないかなとかhtml-helper-mode.elの中身いじればどうにかなるんじゃねとか思ってたけど案の定30分で挫折。

しかし幸いなことにverboseをデフォルトでoffに修正したhtml-helper-modeを公開してくれてる方が。

それでこれ落としてきて前のやつと取り替えたら静かに動くようになった。

[][] Problem 131 00:46  Problem 131を含むブックマーク  Problem 131のブックマークコメント

no title

いくつかの素数pにはが立方数となるような自然数nが存在する。

例えば、p=19のとき、n=8であり、

このような性質をもつ素数pに対するnは一意に定まる。また、100未満の素数に限るとこのような素数は4つしかない。

100万未満の素数のうち、上述の性質をもつものはいくつあるか?

続きを読む