ホームページ >バックエンド開発 >PHPチュートリアル >ループとカスタム数式を使用して素数を効率的に見つけるにはどうすればよいですか?

ループとカスタム数式を使用して素数を効率的に見つけるにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-30 09:13:27878ブラウズ

How can I efficiently find prime numbers using a loop and a custom formula?

ループへの素数公式の組み込み

ループを使用して素数を効率的に見つけることを追求すると、既存のアプローチが不十分です。特定のユースケースを検討し、カスタム数式を使用して最新のソリューションを提供してみましょう。

元の試みとその欠点

最初に共有したコードは、次の方法を使用して素数を識別しようとしました。ループベースのアプローチ。ただし、素数を正しく識別する際、特に数値の除算方法に制限がありました。

最適化された数式と実装

これに対処するには、提供された応答で言及されている isPrime() 関数:

<code class="php">function isPrime($num) {
    //1 is not prime. See: http://en.wikipedia.org/wiki/Prime_number#Primality_of_one
    if($num == 1)
        return false;

    //2 is prime (the only even number that is prime)
    if($num == 2)
        return true;

    /**
     * if the number is divisible by two, then it's not prime and it's no longer
     * needed to check other even numbers
     */
    if($num % 2 == 0) {
        return false;
    }

    /**
     * Checks the odd numbers. If any of them is a factor, then it returns false.
     * The sqrt can be an aproximation, hence just for the sake of
     * security, one rounds it to the next highest integer value.
     */
    $ceil = ceil(sqrt($num));
    for($i = 3; $i <= $ceil; $i = $i + 2) {
        if($num % $i == 0)
            return false;
    }

    return true;
}

式をループに組み込む

これで、ループ内でこの関数を利用して効率的に見つけることができます。素数:

<code class="php">$limit = 100; // Set a limit to the number range you want to check

for ($i = 2; $i <= $limit; $i++) {
    if (isPrime($i)) {
        echo $i . " is a prime number. <br>";
    }
}</code>

この更新されたアプローチにより、指定された制限まで素数を正確に識別できるようになりました。

以上がループとカスタム数式を使用して素数を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。