2014-01-28 4 views

ответ

5

Как описана в документации методы:

ProbablyPrime выполняет н Миллер-Рабин тестов, чтобы проверить, является ли х простого числа. Если он возвращает 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) 
} 
+0

Я думаю, вы хотите, чтобы 'n' было намного больше 1? При n = 1 вы все равно пропустите 3/4 простых чисел. (Это влияет только на большое число, небольшие простые числа являются специальными в алгоритме.) Я бы предложил написать 'isPrime: = i.ProbablyPrime (10)' или так. – jochen

3

x.ProbablyPrime(n) проверяет, является ли x первична, не n. n является фактором, который указывает на то, как трудно ProbablyPrime будет пытаться определить основность x. Чем выше n, тем больше будет ProbablyPrime, и, более вероятно, это будет правильно. В частности, от documentation:

Если возвращает истину, х является простым с вероятностью 1 - 1/4^п

Так что вы хотите вместо этого:

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

Выполнить это here на Go Playground.

+0

Оператор «х первична с вероятностью 1 - 1/4^п» не имеет никакого смысла для меня. Либо x является простым, либо нет, случайности не существует. Напротив, выход алгоритма является случайным, поэтому утверждение типа «Если x не является простым, [функция] возвращает false с вероятностью не менее 1 - 1/4^n», имеет гораздо больший смысл. – jochen

+1

Я не согласен. Вероятность того, что x является простым, учитывая, что функция возвращает true, равна 1 - 1/4^n. Если все, что мы знаем о мире, состоит в том, что 'x.ProbablyPrime (n)' возвращает true, тогда мы знаем, что вероятность того, что x проста, равна 1 - 1/4^n. Конечно, мы могли бы узнать больше о x и более точно узнать о его простоте, но, учитывая только знание вывода 'x.ProbablyPrime (n)', это лучшее, что мы можем сделать. – joshlf

Смежные вопросы