我用JavaScript编写代码来查找Prime数字。
我创建了一个数组(var arr
)并将第一个素数放入其中。
我想检查存储在数组中的最后一个素数的i
值(而不是所有数字,以便更快地运行。)
检查我的代码,请更正我的语法。
var arr = [2];
document.getElementById("demo").innerHTML = arr;
function myFunction() {
for (i = 3; i <= 10; i++) {
if (i % 2 !==0) {
for (j = 0; j <= arr.length - 1; j++){
if (i % arr[j] !== 0) {
arr.push(i);
}
}
document.getElementById("demo").innerHTML = arr;
}
}
答案 0 :(得分:1)
OP提出的算法可能存在问题,即使它在2到10的有限范围内工作,以在纠正代码后产生2,3,5,7
的预期结果。不幸的是,如果数字范围扩大,那么
非素数可以进入,如下所示:
var arr = [2];
function myFunction() {
for (i = 3; i <= 30; i++) {
if (i % 2 !==0 && i % Math.sqrt(i) !==0) {
for (j = 0; j <= arr.length - 1; j++){
if (i % arr[j] !== 0) {
arr.push(i);
}
break;
}
}
}
document.getElementById("demo").innerHTML = arr;
}
myFunction();
&#13;
<div id="demo"></div>
&#13;
以下代码可能效率较低,但无论数字范围有多大,它的优点都在于它的效果。该解决方案源自从here和here借用和修改的代码。
var arr = [2];
function isPrime( n ) {
// eliminate non-integers
if ( n != Math.round(n) ) {
return false;
}
// assume n is prime and test if true
for(var i=2, max=Math.sqrt(n); i <= max; i++) {
if ( n % i === 0 ) {
return false;
}
}
return n > 1;
}
function myFunction() {
for (i = 3; i <= 30; i++) {
if ( isPrime(i) ) {
arr.push(i);
}// end-if
}// end-for
document.getElementById("demo").innerHTML = arr;
}
myFunction();
&#13;
<div id="demo"></div>
&#13;
注意,数组最初以素数2开始,当代码遇到指定范围内的素数时,它们将被添加到数组中。顺便说一下,你需要一个ID为&#34; demo&#34;的HTML DIV标签。为此工作。并且,在循环完成处理之后,您只需要将数组分配给div元素的innerHTML属性一次。最后,您需要调用myFunction()。
有趣的相关讨论here。
答案 1 :(得分:0)
对于最不喜欢代码的人,
function primes(limit)
{
var prime=[], i=1
while (++i < limit+1) prime.reduce((a,c)=>(i%c)*a,1) && prime.push(i)
prime.unshift(1)
return prime
}
[1,2,3,5,10,100].forEach(n=>console.log(`primes(${n})=${primes(n)}`))
答案 2 :(得分:0)
function primeNumbers(num){
let primeNum=[2];
for (let i=3;i<=num;i++){
let notPrime=[];
for (let j=2;j<i;j++){
if (i%j===0){
notPrime.push(i);
}
if (notPrime.length===0){
primeNum.push(i);
}
}
}
return primeNum;
}
primeNumbers(10);