라이브러리

[PHP] gmp_prob_prime - 숫자가 "아마도 소수"인지 확인




PHP의 gmp_prob_prime 함수

PHP의 `gmp_prob_prime` 함수는 주어진 정수에 대한 소수 가능성을 평가합니다. 소수 가능성이란, 주어진 정수가 소수인지 여부를 결정하는 것입니다. 소수는 1과 자기 자신만으로 나누어지는 수입니다.

함수의 매개변수


* `$n`: 정수에 대한 소수 가능성을 평가합니다.
* `$tries`: 소수 가능성을 평가하기 위한 시도 횟수입니다. 기본값은 5입니다.

함수의 반환값


* 소수 가능성이 0보다 크면, 소수 가능성이 100% 이상입니다.
* 소수 가능성이 0보다 작거나 같으면, 소수 가능성이 0% 이하입니다.

예제


#hostingforum.kr
php

<?php

// 2는 소수입니다.

echo gmp_prob_prime(2) . "
"; // 100



// 4는 소수가 아닙니다.

echo gmp_prob_prime(4) . "
"; // 0



// 10007은 소수입니다.

echo gmp_prob_prime(10007) . "
"; // 100



// 10009은 소수입니다.

echo gmp_prob_prime(10009) . "
"; // 100



// 10009*2 = 20018은 소수가 아닙니다.

echo gmp_prob_prime(20018) . "
"; // 0

?>



주의사항


* `gmp_prob_prime` 함수는 소수 가능성을 평가하기 위해 여러 시도를 수행합니다. 시도 횟수는 `$tries` 매개변수로 지정할 수 있습니다.
* 소수 가능성이 100% 이상이면, 주어진 정수가 소수일 수 있습니다. 그러나 소수 가능성이 0% 이하이면, 주어진 정수가 소수가 아닐 수 있습니다.
* `gmp_prob_prime` 함수는 PHP 5.6 이상에서 사용할 수 있습니다.

소수 가능성을 평가하는 방법


소수 가능성을 평가하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 Pollard's rho 알고리즘을 사용하는 것입니다. 이 알고리즘은 소수 가능성을 평가하기 위해 여러 시도를 수행합니다. 시도 횟수는 `$tries` 매개변수로 지정할 수 있습니다.

소수 가능성을 평가하는 코드


#hostingforum.kr
php

function gmp_prob_prime($n, $tries = 5) {

    for ($i = 0; $i < $tries; $i++) {

        $a = gmp_random_bits(gmp_strval($n));

        $x = gmp_mod($a, $n);

        $y = gmp_mod($x, $n);

        while ($x != 1 && $x != $n - 1) {

            $x = gmp_mod($x * $x, $n);

            if ($x == 1) {

                return 0;

            }

        }

        if ($x != $n - 1) {

            return 0;

        }

    }

    return 100;

}



소수 가능성을 평가하는 예제


#hostingforum.kr
php

echo gmp_prob_prime(2) . "
"; // 100

echo gmp_prob_prime(4) . "
"; // 0

echo gmp_prob_prime(10007) . "
"; // 100

echo gmp_prob_prime(10009) . "
"; // 100

echo gmp_prob_prime(20018) . "
"; // 0


  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 10,077건 / 513 페이지

검색

게시물 검색