PHPアルゴリズムの判定が素数か


素数の定義
素数とも呼ばれる.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);

最後に
もし言うのが間違っている地方があるならば、みんなによけいに理解してもらって、伝言と私の疎通、交流を歓迎して、ありがとうございます!