我正在学习JS并偶然发现一个脚本输出素数< 100。但我不确定我是否完全理解它是如何工作的。如果有人能够解释,我会很高兴。 :)
所以这是:
for (var counter = 0; counter <= 100; counter++)
{
for (var i = 2; i <= counter-1; i++)
if (counter%i === 0) break;
if(i === counter)
console.log(counter);
}
答案 0 :(得分:1)
根据定义,素数只能被自己整除1。
外循环for var(counter = 0; ...)
循环遍历从0到100的数字。
然后内循环for (var i = 2; ...)
尝试将外部数字除以2和计数器值之间的每个数字。如果它们中的任何一个除了数字而没有余数,则循环被破坏。这是if (counter%i === 0) break;
行。
如果我们摆脱了循环和i === counter
,那么它是一个素数,否则它不是 - 根据定义。
答案 1 :(得分:1)
/* For every number from 0 to 100, do the following: */
for (var counter = 0; counter <= 100; counter++)
{
/* Loop through values from 2 to 1 before the counter. */
for (var i = 2; i <= counter-1; i++) {
/* if the remainder of dividing counter by the current value of `i` is zero,
* we know we don't have a prime, so break out of the loop:
*/
if (counter%i === 0) break;
}
/* If the loop completed and `i` is equal to the counter, that means counter is not
* divisible by anything except for 1 and itself, making it prime
*/
if(i === counter)
console.log(counter);
}
答案 2 :(得分:0)
我不确定你知道多少JavaScript,所以其中一些可能非常基本。
首先,请记住素数是唯一因子为1的素数。
所以第一行说它从0到100循环,counter
作为保存这个数字的变量。
下一行for (var i = 2; i <= counter-1; i++)
从2循环到counter
- 1(注意它不包括1和counter
)并使用i
来保存此数字。
接下来,if (counter%i === 0) break;
测试counter
是否可以被i
整除:余数运算符%
返回余数(例如来自长除法),例如11 % 3
将返回2
,因为11除以3得到3余数2;如果余数counter % i
为0
(===
是一个比==
更严格的平等,但这是一个完全不同的答案),这意味着counter
可以被i
整除{1}}所以不是素数。 break
语句告诉它退出最内层循环(即i
上的循环),因此程序递增counter
并继续。
如果前一行没有因i
的任何值而中断,则counter
为素数 - 具体而言,在循环体的末尾,i
递增(现在等于counter
),语句i <= counter-1
的计算结果为false,循环结束。所以现在i === counter
为真,因此console.log(counter)
在控制台中显示此值。