我有一个代码
<?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)我们会得到素数作为结果吗?你能解释一下它的工作原理吗?
答案 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; }
例如,如果$j
为10
,则内部for
即$k
将循环显示2
至9
。如果2到9之间的任何数字完全除以10,那么它将使用break;
语句退出循环。在这种情况下,2
完美地划分10
,因此它会突破循环。在if( $k == $j ){...
检查期间,它会发现$k
2
不等于$j
,10
,因此10
是$j
不是素数。
如果11
为for
,则会遵循相同的逻辑。内部2
循环尝试将此数字除以3
,10
,......最多2
,并且看到此范围之间没有数字(10
到11
)可以将数字$k
分开。因此,在退出循环后,11
将为if( $k == $j ){...
。随后,将检查此条件$k
,11
,$j
,11
等于11
,也等于{{1}},数字{{1}} {{1}}是素数。
答案 3 :(得分:0)
因为如果你继续增加k并且没有数字可以对j具有的值进行整除。因此,从素数的定义(素数是一个只能由他自己划分的数字),你有一个素数。实际上你不必继续增加k直到它等于j,它的平方根就足以说明了。正如它在维基百科中所写 - &gt; https://en.wikipedia.org/wiki/Prime_number#Trial_division