- Go language part 1
487 :デフォルトの名無しさん[sage]:2016/01/25(月) 00:54:54.11 ID:11Jcfjfr - Go のバージョンと実際に書かれたコードが分からんので何とも言えない
|
- Go language part 1
489 :デフォルトの名無しさん[sage]:2016/01/25(月) 01:48:00.41 ID:11Jcfjfr - $ ruby --version
ruby 2.2.3p173 (2015-08-18) [i386-linux-gnu] $ time { ruby -e 'require "prime";print Prime.take(10000)' > /dev/null; } real 0m0.405s user 0m0.400s sys 0m0.008s ↓このコードをローカルにコピーして、 http://play.golang.org/p/XXiTIpRBAu const N = 104740 に変更してビルド・実行。 $ go version go version devel +4f40182 Sat Jan 23 01:28:06 2016 +0000 linux/386 $ go build prime.go $ time { ./prime > /dev/null; } real 0m0.064s user 0m0.048s sys 0m0.016s
|
- Go language part 1
491 :デフォルトの名無しさん[sage]:2016/01/25(月) 08:54:26.29 ID:11Jcfjfr - そんなに遅いかな?
x86_64 環境で Prime.take(10000000) をやってみたんだけど(10^7)、 $ ruby --version ruby 2.2.3p173 (2015-08-18) [x86_64-linux-gnu] $ go version go version devel +970ce1c Sun Jan 24 16:07:30 2016 +0000 linux/amd64 ruby: 0m25.204s golang: 0m5.902s となった。prime? メソッドについては後で ruby のソースコードを見てみる
|
- Go language part 1
492 :デフォルトの名無しさん[sage]:2016/01/25(月) 09:30:52.61 ID:11Jcfjfr - ここは、
for i := 3; float64(i) < math.Sqrt(float64(n)); i += 2 { flg = true for _, j := range primes { if int64(i) % j == 0 { flg = false } } if flg == true { primes = append(primes, int64(i)) } } こうすべきなんじゃ? for i := 3; float64(i) < math.Sqrt(float64(n)); i += 2 { flg = true for _, j := range primes { if n%j == 0 { return false } // 追加 if int64(i)%j == 0 { flg = false } : そりゃ n までの素数を全部計算してからチェックしたら遅いわな
|