トップページ > プログラム > 2016年01月25日 > 11Jcfjfr

書き込み順位&時間帯一覧

7 位/146 ID中時間01234567891011121314151617181920212223Total
書き込み数1100000011000000000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Go language part 1

書き込みレス一覧

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 までの素数を全部計算してからチェックしたら遅いわな


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。