为什么这段代码确实显示素数?

时间:2016-12-25 10:08:53

标签: php

我有一个代码

<?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 . ", ";
}

?> 

为什么在这种情况下 if($ k == $ j)我们会得到素数作为结果吗?你能解释一下它的工作原理吗?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

prim是一个数字,在没有提醒的情况下不能除以小于数字本身(除1之外)的数字。所以在你的代码中,如果找到任何数字,没有提醒,你就打破了内循环并继续前进。如果找不到提醒号码$k == $j,那么这是一个素数。

答案 2 :(得分:0)

  

...为什么在这种情况if( $k == $j )我们会得到素数作为结果?

因为内部$k循环中没有其他数字for完全划分$j,否则它将在内部for循环后出现执行此块if( $j % $k == 0 ) { break; }

例如,如果$j10,则内部for$k将循环显示29。如果2到9之间的任何数字完全除以10,那么它将使用break;语句退出循环。在这种情况下,2完美地划分10,因此它会突破循环。在if( $k == $j ){...检查期间,它会发现$k 2不等于$j10,因此10$j不是素数。

如果11for,则会遵循相同的逻辑。内部2循环尝试将此数字除以310,......最多2,并且看到此范围之间没有数字(1011)可以将数字$k分开。因此,在退出循环后,11将为if( $k == $j ){...。随后,将检查此条件$k11$j11等于11,也等于{{1}},数字{{1}} {{1}}是素数。

答案 3 :(得分:0)

因为如果你继续增加k并且没有数字可以对j具有的值进行整除。因此,从素数的定义(素数是一个只能由他自己划分的数字),你有一个素数。实际上你不必继续增加k直到它等于j,它的平方根就足以说明了。正如它在维基百科中所写 - &gt; https://en.wikipedia.org/wiki/Prime_number#Trial_division