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和它本身除的数。