PHPアルゴリズムの判定が素数か
3072 ワード
素数の定義
素数とも呼ばれる.1より大きい自然数は、1とそれ自体を除いて、他の自然数を除去できない数を質量数と呼ぶ.そうでなければ合数と呼ばれます.
実現構想.
可能なすべての候補数をループし、中間数以下で2以上の整数と整数を除いて比較します.整数が可能であれば、質量数ではなく、逆に質量数です.
第1のアルゴリズム
これも最も先に考えられる可能性があります.つまり、候補数の中間数と直接比較し、アルゴリズムのソースコードは以下の通りです.
###2番目のアルゴリズム
真剣に言えば、これも別のアルゴリズムではありませんが、1つ目の少しの最適化と、中間最大数の最適化について、比較範囲を縮小し、アルゴリズムのソースコードは以下の通りです.
第3のアルゴリズム
これも2つ目の最適化であり,すなわち,完全配列から素数でないすべての数を直接削除すればよい,アルゴリズムソースコードは以下のようになる.
使用方法
例えば、1-100のすべての質量数を求めます
また、例えば、指定された配列のすべての質量数を求める
最後に
もし言うのが間違っている地方があるならば、みんなによけいに理解してもらって、伝言と私の疎通、交流を歓迎して、ありがとうございます!
素数とも呼ばれる.1より大きい自然数は、1とそれ自体を除いて、他の自然数を除去できない数を質量数と呼ぶ.そうでなければ合数と呼ばれます.
実現構想.
可能なすべての候補数をループし、中間数以下で2以上の整数と整数を除いて比較します.整数が可能であれば、質量数ではなく、逆に質量数です.
第1のアルゴリズム
これも最も先に考えられる可能性があります.つまり、候補数の中間数と直接比較し、アルゴリズムのソースコードは以下の通りです.
/**
*
* @param array $arr
* @return array
*/
function get_prime_number($arr = []) {
//
$primeArr = [];
//
foreach ($arr as $value) {
//
for ($i = 2; $i <= floor($value / 2); $i++) {
// , ,
if ($value % $i == 0) {
break;
}
}
// $j
// :
// , for break , ,$i +1, $i = floor($value / 2) + 1
// , for break ,$i +1, $i <= floor($value / 2)
if ($value != 1 && $i > floor($value / 2)) {
$primeArr[] = $value;
}
}
return $primeArr;
}
###2番目のアルゴリズム
真剣に言えば、これも別のアルゴリズムではありませんが、1つ目の少しの最適化と、中間最大数の最適化について、比較範囲を縮小し、アルゴリズムのソースコードは以下の通りです.
/**
*
* @param array $arr
* @return array
*/
function get_prime_number($arr = []) {
//
$primeArr = [];
//
foreach ($arr as $value) {
//
for ($i = 2; $i <= floor($value / $i); $i++) {
// , ,
if ($value % $i == 0) {
break;
}
}
// $j
// :
// , for break , ,$i +1, $i = floor($value / $i) + 1
// , for break $i +1, $i <= floor($value / $i)
if ($value != 1 && $i > floor($value / $i)) {
$primeArr[] = $value;
}
}
return $primeArr;
}
第3のアルゴリズム
これも2つ目の最適化であり,すなわち,完全配列から素数でないすべての数を直接削除すればよい,アルゴリズムソースコードは以下のようになる.
/**
*
* @param array $arr
* @return array
*/
function get_prime_number_three($arr = []) {
//
$primeArr = $arr;
//
foreach ($primeArr as $key => $value) {
if ($value == 1) {
unset($primeArr[$key]);
continue;
}
//
for ($i = 2; $i <= floor($value / $i); $i++) {
// , ,
if ($value % $i == 0) {
unset($primeArr[$key]);
break;
}
}
}
//
return array_values($primeArr);
}
使用方法
例えば、1-100のすべての質量数を求めます
//
$numberArr = range(1, 100, 1);
//
$primeNumberArr = get_prime_number($numberArr);
//
print_r($primeNumberArr);
また、例えば、指定された配列のすべての質量数を求める
//
$numberArr = [11, 22, 33, 66, 77, 3, 8, 10, 99];
//
$primeNumberArr = get_prime_number($numberArr);
//
print_r($primeNumberArr);
最後に
もし言うのが間違っている地方があるならば、みんなによけいに理解してもらって、伝言と私の疎通、交流を歓迎して、ありがとうございます!