2011-07-08 31 views
0

我試圖顯示所有素數達10,它不工作。你能看到我做錯了什麼嗎?代碼顯示所有不在JavaScript中使用的素數?

function findPrimeNumbers() { 
    var count = 10, 
     primes = []; 
    for (var i = 0; i <= count; i++) { 
     if (count/i === 1 || count) primes.push(i); 
     else continue; 
     count -= 1; 
    } 
    for (var i = 0, len = primes.length; i < len; i++) return primes[i]; 
} 

console.log(findPrimeNumbers()); 

它只在控制檯中返回0。

+0

它以什麼方式不起作用? – Flimzy

+0

它只返回0.並非所有素數達到10. – 0x499602D2

回答

0

for (var i = 0, len = primes.length; i < len; i++) return primes[i];

給你的回報只是數組的第一個元素。我認爲你的意思是這樣的

var retstr = ""; 
for (var i = 0, len = primes.length; i < len; i++) 
{ 
    //To improve str format 
    if(i == len-1) 
     retstr += primes[i]; 
    else 
     retstr += primes[i] + ", "; 
} 

return retstr; 

希望這會有所幫助。

0
if (count/i === 1 || count/i === count) 
+0

對不起,但現在它只返回1.它仍然不起作用。 – 0x499602D2

0

你不說怎麼不工作,而是涉及到了我的注意的第一件事是,你遞增,而在同一時間遞減計數,所以絕不會一路到達10

此外,計數/我將導致第一次迭代除以零的錯誤,因爲它是書面的(除非使用Javascript神奇地處理在某種程度上我的話不熟悉)。

然後你「循環」你的返回值 - 但你只能從函數返回一次,所以當然你只會返回第一個值。

0

並且您正在從最後一個for循環中的函數返回。除去for循環,只返回數組。

+0

現在它返回1和9。 – 0x499602D2

2

這是關於生成素數的最簡單方法。請注意,有更有效的方法,但它們更難以理解。

function findPrimeNumbers (count) { 
    var primes    = []; 

    for (var J = 2; J <= count; J++) { 
     var possPrime  = true; 

     for (var K = 2, factorLim = Math.sqrt (J); K <= factorLim; K++) { 
      if (J % K == 0) { 
       possPrime = false; 
       break; 
      } 
     } 
     if (possPrime) 
      primes.push (J); 
    } 
    return primes; 
} 

console.log (findPrimeNumbers (10)); 


這產生所有素數< = 10:

[2, 3, 5, 7] 


See Wikipedia for an explanation