你如何使用golang的ProbablyPrime?

时间:2014-01-28 06:26:51

标签: go primes

我的尝试总是假的:(

package main

import (
    "fmt"
    "math/big"
)

func main() {
    i := new(big.Int)
    j := i.ProbablyPrime(2)
    fmt.Println(j)
}

有谁能让我知道我做错了什么?

2 个答案:

答案 0 :(得分:5)

如方法文档中所述:

  

ProbablyPrime执行n Miller-Rabin测试以检查x是否为   主要。如果它返回true,则x为素数,概率为1 - 1/4 ^ n。如果   它返回false,x不是素数。

n,您传递给方法的参数不是您尝试测试素数的数字,而是确定进行素数猜测的准确度:n值越高,越准确猜测将是以牺牲额外的计算为代价。

如果你想测试2是否为素数,你可以做(​​http://play.golang.org/p/ZGx4XOd6WA):

package main

import (
    "fmt"
    "math/big"
)

func main() {
    i := big.NewInt(2)
    isPrime := i.ProbablyPrime(1)
    fmt.Println(isPrime)
}

答案 1 :(得分:3)

x.ProbablyPrime(n)检查x是否为素数,而不是nn是一个因素,表示ProbablyPrime将尝试确定x的素数有多难。 n越高,ProbablyPrime将越长,并且更有可能是正确的。具体来说,来自documentation

  

如果返回true,则x为素数,概率为1 - 1/4 ^ n

所以你想要的是:

x := big.NewInt(2)
fmt.Println(x.ProbablyPrime(4))

在Go Playground上运行here