我正在做Project Euler问题。我目前正在研究圆形素数问题
数字 197 被称为圆素数,因为数字的所有旋转:197、971 和 719 本身都是素数。
100 以下的素数有 13 个:2、3、5、7、11、13、17、31、37、71、73、79 和 97。
一百万以下有多少个圆素数?
虽然检查某个东西是否是素数对我来说很容易,但我无法弄清楚如何获得数字的所有排列。经过大量搜索有关算法的提示后,我遇到了一个网站,该网站提供了 Java 代码,我在下面适应了 PHP。但是,在继续解决问题之前,我真的很想了解代码的不同位到底在做什么,尤其是在 for 循环中。到目前为止我对它的理解是,在for循环中,它以一个空前缀开始,然后循环遍历字符串并将字符串中的单个元素添加到前缀中,直到原始字符串中只剩下一个元素,在这一点上,它呼应了它。我是否正确理解这一点?如果没有,我错过了什么?
<?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);
}
}
?>