js使用递归函数计算n以内的素数(质数)和?

  • 视频智能标签(IVLD)将视频智能分析输出文本标签、图像标签和人物标签,并输出与视频的标题、摘要、封面等结构化信息,并通过应用控制台进行可视化展示。

}

直接遍历,判断每个数字是否能整除 2 一直到自身,如果都不能被整除,那么就是素数。

接着是一个细微的改进版本:

不知道你有没有发现,在判断整除的时候其实做了很多无用功,每个数字都不能整除大于自己一半以上的数字。那么我们直接把第二个循环的 num 替换成 num/2+1(+1 的原因是 range 的后半部分是开区间,在遍历时只会输出 num/2)。

如果你刷 LeetCode 做到 Count Prime 这题的话,会发现这个改进的方法还是无法 AC !!!

好了,厄氏大法该你上场了!

西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese)。

具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于 n 的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 n 的素数。

最后回答题目图片里的问题:「return True 为什么要放在 for 循环的外面?」

由上文可知,显然当所有 n % i 等于 0 的都不成立时,才能判断 n 是素数。

如果直接放循环体内,那么相当于只判断了一次就 return 了,不能判断 n 是否为素数。

}

什么是质数: 一个数值,如果出了 1和这个数值本身,没有其他数值可以将这个数整除 ,那么这个数就是 质数 。
例如 :9 可以被 3整除 ,是 合数 不是质数 ,11 出了 1和11 没有其他数值可以将其整除 , 11就是质数 。1和2是两个特殊的数值,不算质数也不算合数。
判断一个随机数值,是否是质数
1、 定义一个变量,来存储判断的结果
2、 默认值表示这个数值是质数
3、默认值可以随便定义
4、循环,生成的整数是 2 至 判断数值-1 的所有整数
// 如果 数值9 与 循环变量 发生 整除
// 证明 有数值 可以 整除 9
// 此时就判断9 是 合数
// 给存储判断结果的变量,赋值新的数据,覆盖之前的默认值 res = false;
// 一旦发生整除,其他循环就可以终止了
// 当循环结束了,判断 res变量中存储的是不是默认值
// 如果是默认值,证明9是质数
// 如果不是默认值,证明9是合数
1、我们执行是否是质数,实际是执行的多次判断 。
2、如果每次判断都执行一个输出结果,会有多个结果我们实际上只需要最终的执行结果,并且只输出一次 。
3、我们定义一个变量,来存储判断的结果,并且根据这个变量存储的数据,来执行输出 。
4、给这个变量,定义一个初始值,表示是质数 。
5、如果发生整除,就给变量,赋值一个新的数值,覆盖初始值,表示数值是合数了 。
6、当循环结束后,变量中,会存储一个数值,如果是原始值,表示数值是质数,如果不是原始值,表示是合数根据结果来输出,数值是不是质数。

}

我要回帖

更多关于 js递归函数的执行过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信