2016-12-25 81 views
0

我有一个代码为什么这段代码显示素数?

<?php 

$num = 20; 
echo "Prime: "; 
for($j = 2; $j <= $num; $j++) { 
for($k = 2; $k < $j; $k++) { 

    if($j % $k == 0) { 
     break; 
    } 
} 
if($k == $j) 
echo $j . ", "; 
} 

?> 

为什么有这个情况如果($满足K == $ j)的我们将黄金作为结果呢?你能解释它是如何工作的吗?

回答

0

...为什么在这种情况下if($k == $j)我们会有结果吗?

因为有在内部for环路完全划分$j没有其它数量$k,否则会使出来内for循环后此执行该块,if($j % $k == 0) { break; }

例如,如果$j10 ,内部for$k将通过2循环到9。如果2到9之间的任何数字完全除以10,则它将使用break;语句从循环中出来。在这种情况下,2完全分开10,因此它跳出循环。并在if($k == $j){...检查它看到$k,这是2,不等于$j,这是10,因此10不是素数。

如果$j11同样的逻辑也将随之而来。内部for循环尝试将此数字与2,3,3,...高达10分开,并且看到此范围(210)之间的数字不能分为11。所以在循环之后,$k将会是11。随后,这种情况将被选中,if($k == $j){...以来$k,这是11,等于$j,这也等于11,数量11是素数。

+0

感谢您的好解释。现在据了解! –

0

$k == $j表明从2到$j,非木材可以匹配$j % $k = 0,否则它会在内部for循环中断,所以它是素数。

0

甲拘谨是一个数字,它不能由数比不提醒该数字本身(除1)更小的被划分。因此,在您的代码中,如果找到任何数字,而没有提醒您打破内部循环并继续。当没有提醒号码被发现时,$k == $j,所以它是一个主要。

+0

素数是一个只能被1和自身分开的数字。 – Robert

0

因为如果你继续递增k,并且没有数字可以被j值所整除。因此,从素数的定义(素数是一个只能由自己和一个人分配的数字),你就有一个素数。实际上,你不必一直增加k,直到它等于j,平方根就足以说明这一点。因为它是用维基百科书写的 - >https://en.wikipedia.org/wiki/Prime_number#Trial_division