我的尝试总是假的:(
package main
import (
"fmt"
"math/big"
)
func main() {
i := new(big.Int)
j := i.ProbablyPrime(2)
fmt.Println(j)
}
有谁能让我知道我做错了什么?
答案 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
是否为素数,而不是n
。 n
是一个因素,表示ProbablyPrime
将尝试确定x
的素数有多难。 n
越高,ProbablyPrime
将越长,并且更有可能是正确的。具体来说,来自documentation:
如果返回true,则x为素数,概率为1 - 1/4 ^ n
所以你想要的是:
x := big.NewInt(2)
fmt.Println(x.ProbablyPrime(4))
在Go Playground上运行here。