素数判定

isPrimeNumber:2 ~ $num – 1で割れるかどうか
isPrimeNumber2:エラトステネスの篩
(2は内部で1を使用)

・2の方が高速
・めんどーなので型チェックとかはやってない。

isPrimeNumber:2 ~ $num – 1で割れるかどうか
isPrimeNumber2:エラトステネスの篩
(2は内部で1を使用)

・2の方が高速
・めんどーなので型チェックとかはやってない。

  • タグ:
  • タグはありません
<?php
/**
 * 素数判定
 * (2 ~ $num - 1で割れるかどうか)
 *
 * @param integer $num 整数
 * @return boolean 素数か否か
 */
function isPrimeNumber($num)
{
	// 1以下は素数で無い
	if ($num <= 1) {
		return FALSE;
	}

	$ret = TRUE;
	for ($ii = 2; $ii < $num; $ii++) {
		// 割り切れる
		if ($num % $ii == 0) {
			$ret = FALSE;
			break;
		}
	}

	return $ret;
}

/**
 * 素数判定
 * エラトステネスの篩 - Wikipedia
 * http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9
 *
 * @param integer $num 整数
 * @return boolean 素数か否か
 */
function isPrimeNumber2($num)
{
	// 1以下は素数で無い
	if ($num <= 1) {
		return FALSE;
	}

	// 平方根の小数点以下切捨て
	$max = floor(sqrt($num));

	$ret = TRUE;
	for ($ii = 2; $ii <= $max; $ii++) {
		// 素数の場合
		if (isPrimeNumber($ii)) {
			if ($num % $ii == 0) {
				$ret = FALSE;
				break;
			}
		}
	}

	return $ret;
}
?>