javascript - 为什么当 i=9 时这个 javascript 素数代码会失败?
问题描述
我写了这个javascript素数函数,但它说 9 是素数,我不知道 9 有什么问题。
function prime(...num) {
for (let i of range(...num)) {
for (let j of range(2,i)) {
if (i%j===0) {
console.log(i+' is not a prime number' );
break;
}else{
console.log(i + ' is a prime number'); }
break;
}
}
}
当我运行时,我期望得到以下输出prime(range(8,10));
:
8 is not a prime number
9 is not a prime number
但它反而返回:
8 is not a prime number
9 is a prime number
解决方案
您的问题是您仅执行第一个除法(除以 2),检查模是否等于 0 以及是否等于 0,并以此为基础您的答案。
这是一些应该可以帮助您的伪代码:
notPrime = false
for (let j of range(2,i))
if (i%j===0)
notPrime = true
break //it is not necessary if a divisor is found.
if (notPrime)
console.log(i+' is not a prime number' );
else
console.log(i + ' is a prime number');
这个算法有很多改进,但最简单的一个是使用range(2, n/2)
. 您将在 range 中找不到除数[n/2 + 1, n - 1]
。
推荐阅读
- c# - 如何下载电子邮件附件 asp.net 网络表单?
- php - Laravel 模型创建覆盖
- java - 是什么影响了 JVM 内存分配超出 -Xmx?
- python - 如何改进 textacy.extract.semistructured_statements() 结果
- multithreading - 如何在 Rust 结构中创建线程局部变量?
- r - 如果另一列包含值,则过滤列值
- c++ - 当最小分配对齐为 16 字节时,如何进行 24 字节大小的分配?
- python - 无法为具有形状的数组分配 60.0 GiB.. Keras
- r - 在 R 中绘制矩阵的数值范围
- visual-studio - 在 Visual Studio 中为 LaTeX 代码换行