2016-10-10 11 views
1

私は最近、数字が素数であるかどうかを教えるプログラムを作成しました。すべての答えは正しく得られますが、素数は9になります。素数プログラムが間違った答えを与える

package main 

import "fmt" 

func isPrime(num int) bool { 
    for x := 2; x > 1; x++ { 
     if num%2 == 0 { 
      return false 
     } else { 
      return true 
     } 
    } 
    return true 
} 

func main() { 
    fmt.Printf("is it a prime number: %v \n", isPrime(9)) 
} 

問題は何ですか?
ありがとうございます!

+2

うーん、私には思える 'isPrime'は、すべての偶数番号のすべての奇数のための真と偽を返します。 –

答えて

0

の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

enter image description here

0

これはそのままですが、コードでは数字のパリティがチェックされ、偶数の場合はfalseが返されます。私は実際に行くを知らないが、私は次のコードを使用して、この問題をうまくするために管理しました:

func isPrime(num int) bool { 
    for x := 2; x < num; x++{ 
     if num%x == 0 && num!=2{ 
      return false 
     } 
    }return true; 
} 
0

prime number definition素数(またはプライム)によると、1以上の自然数であります1以外の正の除数がなく、それ自体がであるかどうかをチェックするのは、が奇数かどうかだけです。

私はあなたに速い解決策を残しました。https://play.golang.org/p/2XXTUFbjhyそれは数字の平方根に行くだけです。また

func isPrime(n int) bool { 
    if n <= 1 { 
     return false 
    } 
    for ix, sqn := 2, int(math.Sqrt(float64(n))); ix <= sqn; ix++ { 
     if n%ix == 0 { 
      return false 
     } 
    } 
    return true 
} 

あなたは数が、私はあなたがここでSieve of Eratosthenes

関連する問題