我只是一个PHP初学者。我试着写一个素数的程序,但结果是不正确的。我找不到错误。我怎样才能纠正这个问题呢?下面是我的代码:
<?php
$n=15;
for($i=2; $i<=$n; $i++)
{
echo "<br />";
for($j=2; $j<=$i-1; $j++)
{
$k=$i%$j;
if($k==0)
{
break;
}
else echo $i."is prime";
break;
}
}
?>
试试这个:
<?php
$n=15;
for($i=2; $i<=$n; $i++)
{
$k = 1; //assume that it is prime
for($j=2; $j<$i; $j++) //if $i is 2, then it won't enter the loop as it will not match the condition ($j<$i)
{
$k=$i%$j;
if($k==0)
break; //if not prime, $k will be set as 0. So, break.
}
if($k!=0) // if $k <> 0, then it is prime
echo "<br />" . $i." is prime";
}
?>
编辑更新了代码,以处理"2"
试试这个(不使用循环)
function is_prime($p) {
return ($p > 1) && (($p%2 >= 1) && ($p%3 >= 1) && ($p%5 >= 1)) || in_array($p, [2,3,5]);
}
回声is_prime (15);
在它第一次运行的时候,你基本上通过调用这个来打破循环:
if (something) {
break;
} else {
break;
}
无论如何它都会破裂。
好吧,你的代码有点费解;乍一看,它似乎试图通过检查N以下的每个除数来确定素数,但你有一个外循环,我一开始没有看到…哦男孩。
如果你只是想弄清楚某个数字N是否是素数,下面的方法应该是有效的:
$n = 15
$prime = true;
for ($i = 2; $i < sqrt($n); $i++) {
if ($n % $i == 0) {
$prime = false;
break;
}
}
echo $n . " is " . ($prime ? "" : "not") . " prime.";
<?php
echo "TEST'r'n";
$n=15;
for($i=2; $i<=$n; $i++)
{
echo "I= $i 'r'n";
for($j=2; $j<=$i-1; $j++)
{
$k = $i%$j;
if($k==0)
{
break;
} else {
echo $i."is prime 'r'n";
}
break;
}
}
我认为你的第二个for循环是不正确的。
for($i=2; $i<=$n; $i++) {
echo "<br />";
for($j=2; $j<=$i-1; $j++) {
...
$j的第一个值是2。第一次,$i的第一个值还是2。现在,看看第二个for循环代码。第一次将是这样的:
for($j=2; $j<=2-1; $j++) ... // for($j=2; $j<=1; $j++)
这个条件根本不成立:2<=1