monolog

monora log #=> ものろーぐ

Kuinでエラトステネスのふるい

Programming

Kuin0.02が公開されたのでエラトステネスのふるいを使って素数を計算してみた。

Kuin0.02でコンパイル, 動作確認してます。

まだKuin用のシンタックスハイライトがない………

constに関するコンパイルエラー、Kuin0.021で修正されました。くいなちゃんに感謝です。 (2012/8/27 22:55)

{
  エラトステネスのふるい

  Author: きょんたん (@kyonline)
}

func Main()
  const N : int :: 10000000

  var isPrime : []bool :: @new [N]bool
  var Prime : []int :: @new [N]int
  var numPrime : int :: 0

  for i(0, N - 1)
    do isPrime[i] :: true
  end for

  do Prime[0] :: 2
  do numPrime :+ 1

  for i(3, N - 1, 2)
    if (!isPrime[(i - 1) / 2 - 1])
      continue i
    end if

    do isPrime[(i - 1) / 2 - 1] :: false
    do Prime[numPrime] :: i
    do numPrime :+ 1

    do Kuin@Dbg(i.ToStr())

    var j : int :: (i - 1) / 2 - 1 + i
    while (j < N)
      do isPrime[j] :: false
      do j :+ i
    end while

  end for

  do Kuin@Stop()
end func

Comments are closed.