Golang 示例 - 检查数字是否为素数

179 阅读2分钟

这篇文章包括三个检查质数的程序。

一个是固定数字的质数检查,第二个是检查从用户控制台读取的质数,第三个是检查大int类型的质数检查。

数学中的质数是一个大于1的整数或正数,它可以除以自己和1。

例如,数字可以被除以余数为零。数字19只能被19或1除以。

质数的几个要点

  • 数字0和1不是质数
  • 所有的质数都是奇数,除了数字2是偶数。
  • 质数不能被任何其他数字整除,除了它本身和1。
  • 大于5且以5结尾的数字不是质数。

要理解下面的程序,你必须了解Go语言的以下特点。

检查质数与否的程序示例

以下是对一个给定的数字进行素数检查。

package main  
import (  
 "fmt"  
)  
  
func CheckPrime(number int) {  
 isPrime := true  
 if number == 0 || number == 1 {  
  fmt.Printf(" %d is not a  prime number\n", number)  
 } else {  
  for i := 2; i <= number/2; i++ {  
   if number%i == 0 {  
    fmt.Printf(" %d is not a  prime number\n", number)  
    isPrime = false  
    break  
   }  
  }  
  if isPrime == true {  
   fmt.Printf(" %d is a prime number\n", number)  
  }  
 }  
}  
func main() {  
 CheckPrime(0)  // not a prime  
 CheckPrime(1)  // not a prime  
 CheckPrime(3)  // a prime  
 CheckPrime(25) // not a prime  
  
}  

当上述程序被编译和执行时,输出为

0 is not a  prime number  
1 is not a  prime number  
3 is a prime number  
25 is not a  prime number  

检查质数的程序示例 读取用户控制台输入的信息

下面的程序从用户控制台接收输入,并将其存储在变量数字中。函数CheckPrime被声明为int类型。

package main  
import (  
 "fmt"  
)  
  
func CheckPrime(number int) {  
 isPrime := true  
 if number == 0 || number == 1 {  
  fmt.Printf(" %d is not a  prime number\n", number)  
 } else {  
  for i := 2; i <= number/2; i++ {  
   if number%i == 0 {  
    fmt.Printf(" %d is not a  prime number\n", number)  
    isPrime = false  
    break  
   }  
  }  
  if isPrime == true {  
   fmt.Printf(" %d is a prime number\n", number)  
  }  
 }  
}  
func main() {  
 var number int  
 fmt.Print("Enter Number To check Prime:")  
 fmt.Scanln(&number)  
 CheckPrime(number)  
}  

当上述程序被编译和执行时,输出为

Enter Number To check Prime:5  
 5 is a prime number  
  
Enter Number To check Prime:23  
 23 is a prime number  
  
Enter Number To check Prime:17  
 17 is a prime number  

使用ProbablyPrime函数检查素数的程序示例

Probablyprime是一个函数math/big包。ProbablyPrime执行Miller Rabin测试来检查一个给定的数字是否是素数。

这对Int64类型的数字很有效。

package main  
  
import (  
 "fmt"  
 "math/big"  
)  
  
func main() {  
 const number = 457862  
 if big.NewInt(number).ProbablyPrime(0) {  
  fmt.Printf(" %d is a prime number\n", number)  
 } else {  
  fmt.Printf(" %d is not a prime number\n", number)  
 }  
}  

输出是

457862 is not a prime number