の1-読んお勧めプライマーであるかどうかを知ることはより高速な方法に興味があるなら、あなたのコードの作業バージョンです:それを試してみてくださいon The Go Playground。
package main
import "fmt"
func isPrime(num int) bool {
if num < 2 {
return false
}
for x := 2; x < num; x++ {
if num%x == 0 {
return false
}
}
return true
}
func main() {
fmt.Printf("is it a prime number: %v \n", isPrime(9))
}
2-だけでも素数2であるので、最初に確認した方がよい。
if n == 2 {
return true
}
そして他の偶数の素数が存在しない:そこそれらをすべて削除し、及びあなたがn
の平方根以上のことをチェックする必要はありません
if n < 2 || n&1 == 0 {
return false
}
と::なし素数2以上である
sqrt := int(math.Sqrt(float64(n)))
そして今、あなただけの奇数(i += 2
)で、3から始めることがあります。The Go Playground上でそれを試してみてください
for i := 3; i <= sqrt; i += 2 {
if n%i == 0 {
return false
}
}
:
package main
import (
"fmt"
"math"
)
func isPrime(n int) bool {
if n == 2 {
return true
}
if n < 2 || n&1 == 0 {
return false
}
sqrt := int(math.Sqrt(float64(n)))
for i := 3; i <= sqrt; i += 2 {
if n%i == 0 {
return false
}
}
return true
}
func main() {
fmt.Printf("is it a prime number: %v \n", isPrime(9))
for i := 0; i < 120; i++ {
if isPrime(i) {
fmt.Print(i, " ")
}
}
fmt.Println()
}
出力:
is it a prime number: false
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113
参照:
Prime number
Generating primes
うーん、私には思える 'isPrime'は、すべての偶数番号のすべての奇数のための真と偽を返します。 –