1

Project Eulerの問題をやっています。私は現在、円素数の問題に取り組んでいます

数字 197 は、197、971、および 719 のすべての数字の回転自体が素数であるため、循環素数と呼ばれます。

100 未満の素数は、2、3、5、7、11、13、17、31、37、71、73、79、97 の 13 個あります。

100万未満の円素数はいくつあるか?

何かが素数であるかどうかを確認するのは簡単でしたが、数値のすべての順列を取得する方法がわかりませんでした。それを行うためのアルゴリズムに関するヒントをかなり検索した後、Java でそのためのコードを提供する Web サイトに出くわし、それを以下の PHP に適応させました。ただし、問題に進む前に、特に for ループで、コードのさまざまなビットが正確に何をしているのかを理解したいと思います。これまでのところ、for ループでは、空のプレフィックスから始まり、文字列をループして、元の文字列に要素が 1 つだけ残るまで、文字列から単一の要素をプレフィックスに追加していることを理解しています。 、その時点で、エコーアウトします。私はこれを正しく理解していますか?そうでない場合、何が欠けていますか?

<?php
    getallcombos("","1234");
    function getallcombos($prefix,$string){
        if(strlen($string)==1){
            echo $prefix.$string."<br>";
        }
        $array=str_split($string);
        for($i=0;$i<strlen($string);$i++){
            $newstr=substr($string,0,$i).substr($string,$i+1);
            getallcombos($prefix.$array[$i],$newstr);
        }                       
    }       
?>
4

2 に答える 2