Php 为什么这个代码显示素数?
我有密码Php 为什么这个代码显示素数?,php,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 . ", "; } ?> 为什么在这个条件下,如果($k==j)我们会有素数作为结果?你能解释一下它是如何工作的吗
<?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)我们会有素数作为结果?你能解释一下它是如何工作的吗?
$k==$j
显示从2到$j
,非数字可以匹配$j%$k=0
,否则它将在内部for循环中中断,因此它是prim。prim是一个数字,在没有提示的情况下,它不能被小于数字本身(1除外)的数字所除。因此,在您的代码中,如果找到任何没有提示的数字,您将中断内部循环并继续。当没有发现更少的数字时,$k==$j
,因此它是一个素数
。。。为什么在这个条件下,如果($k==j)
我们会有素数作为结果
因为在的内部$k
循环中没有其他数字可以完美地分割$j
,否则它将在执行此块后从的内部循环中出来,如果($j%$k==0){break;}
例如,如果$j
是10
,则的内部,即$k
将通过2
循环到9
。如果2到9之间的任何数字完美地除以10,那么它将使用break退出循环代码>语句。在这种情况下,2
完美地除以10
,因此它脱离了循环。在期间,如果($k=$j){…
检查,它会看到$k
,即2
,不等于$j
,即10
,因此10
不是素数
如果$j
是11
,则将遵循相同的逻辑。for
的内部循环尝试将此数字除以2
,3
,…直到10
,并发现此范围之间没有数字(2
到10
)可以分割数字11
。因此,在退出循环后,$k
将是11
。随后,将检查此条件,如果($k==$j){…
,因为$k
,它是11
,等于$j
,它也等于11
,所以数字11
是素数。因为如果你不断增加k,没有数字可以被j的值整除。所以从素数的定义来看(质数是一个只能被他和一除的数)你有一个质数。实际上你不必一直递增k,直到它等于j,平方根就足够了。正如维基百科所写->质数是一个只能被1和它本身除的数。