вторник, 28 апреля 2020 г.

Проверка является ли число простым в Golang

Для целочисленных типов используйте ProbiablePrime(0) из пакета math/big. Этот тест на простоту на 100% точен для входных данных менее чем 2 в 64 степени (18446744073709551616).

const n = 1212121
if big.NewInt(n).ProbablyPrime(0) {
    fmt.Println(n, "- простое число")
} else {
    fmt.Println(n, "- не простое число")
}

Вывод:

1212121 - простое число

Большие числа

Для больших чисел вам необходимо указать желаемое количество тестов для ProbiablePrime(n). Для n тестов вероятность возврата истины для случайно выбранного не простого числа составляет не более (1/4)n. Распространенным выбором является использование n = 20; это дает ложную положительную оценку в 0.000,000,000,001 случаев.

z := new(big.Int)
fmt.Sscan("170141183460469231731687303715884105727", z)
if z.ProbablyPrime(20) {
    fmt.Println(z, "- возможно простое число")
} else {
    fmt.Println(z, "- не простое число")
}

Вывод:

170141183460469231731687303715884105727 - возможно простое число


Читайте также:


Комментариев нет:

Отправить комментарий