function primeSieve() {
for(i = 0; i <= 100; i++){
let flag = true
for(let j = 2; j < i/2; j++){
if(i % j === 0){
flag = false
}
}
if(flag){
console.log(i)
}
}
}
primeSieve();
嗨,
我正在研究一些算法,遇到了一个主要的筛子问题。我正在尝试打印0到100之间的所有素数,并且大部分情况下都可以使用。但是,我意识到4以某种方式滑倒了,我不知道为什么要为我的生命而死。想知道我是否能看到几双眼睛,看看4最终如何登录到控制台,为什么会这样?
谢谢!
答案 0 :(得分:2)
内部循环中的条件:
<?php
$A=ord("H");
echo($A);
?>
是
for (let j = 2; j < i / 2; j++) {
这意味着,当j < i / 2
为4时,一旦i
到达j
(或者,由于2
总是在第一次迭代之前被初始化为2),则循环中断。因此,没有任何迭代,j
中的i
到4
就没有任何机会。
更改为
flag = false
此外,每个维基百科:
素数(或素数)是大于1的自然数,不能通过将两个较小的自然数相乘而形成。
因此,您应该将for (let j = 2; j <= i / 2; j++) {
从2而不是0开始。
此外,就像您的i
一样,最好用let j
声明i
,以免隐式污染全局范围:
let
答案 1 :(得分:0)
除了包含要用j
检查的j <= i / 2
的值之外,还可以省略标志的使用,而将continue
与带有标签的外部循环一起使用。
function primeSieve() {
outer: for (var i = 2; i <= 100; i++) {
for (var j = 2; j <= i / 2; j++) {
if (i % j === 0) {
continue outer;
}
}
console.log(i);
}
}
primeSieve();