2016-01-13 67 views
1

我想產生這樣的素數:CoffeeScript的素數生成

generatePrimeNumbersBelowN = (n) -> 
    for i in [2..n-1] 
    isPrime = true 
    for j in [2..i-1] 
     isPrime = false if i % j == 0 
     break if not isPrime 
    console.log(i, "is Prime Number.") if isPrime 

generatePrimeNumbersBelowN(100); 

我得到質數3〜97,包容性。我是JavaScript/CoffeeScript的新手,所以請告訴我2中發生了什麼?

這裏的所生成的JS代碼:

var generatePrimeNumbersBelowN; 

generatePrimeNumbersBelowN = function(n) { 
    var i, isPrime, j, k, l, ref, ref1, results; 
    results = []; 
    for (i = k = 2, ref = n - 1; 2 <= ref ? k <= ref : k >= ref; i = 2 <= ref ? ++k : --k) { 
    isPrime = true; 
    for (j = l = 2, ref1 = i - 1; 2 <= ref1 ? l <= ref1 : l >= ref1; j = 2 <= ref1 ? ++l : --l) { 
     if (i % j === 0) { 
     isPrime = false; 
     } 
     if (!isPrime) { 
     break; 
     } 
    } 
    if (isPrime) { 
     results.push(console.log(i, "is Prime Number.")); 
    } else { 
     results.push(void 0); 
    } 
    } 
    return results; 
}; 

generatePrimeNumbersBelowN(100); 

回答

0
generatePrimeNumbersBelowN = (n) -> 
    for i in [2..n-1] 
    isPrime = true 
    for j in [2..i-1] 
     isPrime = false if i % j == 0 
     break if not isPrime 
    console.log(i, "is Prime Number.") if isPrime 

i爲2,來自2 j範圍下降到1.然後檢查i % j其爲2%的1,其是零和聲稱2不是素數。

由於for x in [b..a]提供了一個向下的循環從B到A,而循環結構解決了這個問題。

generatePrimeNumbersBelowN = (n) -> 
    i = 2 
    while i < n 
    isPrime = true 
    j = 2 
    while j < i 
     isPrime = false if i % j == 0 
     break if not isPrime 
     j++ 
    console.log(i, "is Prime Number.") if isPrime 
    i++ 

generatePrimeNumbersBelowN(100);