首頁 > web前端 > js教程 > 主體

JavaScript趣題:質數之差

黄舟
發布: 2017-02-04 15:09:44
原創
1254 人瀏覽過

質數不是有規律分佈的,這從兩個相鄰質數的差就能得到體現。
2和3相差1,3和5相差2,5和7的確也是相差2,但7和11卻相差了4。
乍看之下,你的確找不到規律,事實也是如此。
在2到50之間,我們可以找到如下的相鄰的差為2的質數對:
3-5, 5-7, 11-13, 17-19, 29-31, 41-43
很明顯,滿足上面條件的第一對質數是3-5。
那麼,更通用的情況,從m到n之間,差距為g的第一對相鄰質數是多少?
函數原型如下:
gap(g , m , n)

範例如下:

gap(2, 5, 7) // --> [5, 7]  
gap(4, 130, 200) // --> [163, 167]  
gap(2, 5, 5) // --> null
登入後複製

請注意,一定要是符合g差的第一對相鄰質數。
如果找不到,回傳null。
對於這一類和質數打交道的題目,咋們都無可避免地要引入一個判斷質數的函數,有時我也不禁YY,要是能把這個函數納入ECMA標準,那該多爽!
但是考慮到通用性,這個isPrime方法確實應用場景窄了點,不適合綁定在Number.prototype上面,於是就只能一次次地做題目時扒下來粘貼了,汗^_^。
這個題目本身沒什麼難度,一趟循環,遇到符合條件的質數對就return,沒有符合條件的返回null,就這樣了!

Number.prototype.isPrime = function(){    
    var maxFactor = Math.floor(Math.sqrt(this));    
        for(var i=2;i<=maxFactor;i++){    
            if(this % i === 0){    
                return false;    
            }    
        }    
    return true;    
};    
  
function gap(g, m, n) {  
    var firstPrime;  
    var secondPrime;  
    for(var i=m;i<=n;i++){  
        if(i.isPrime()){  
            firstPrime = secondPrime;  
            secondPrime = i;  
            if(secondPrime - firstPrime === g){  
                return [firstPrime,secondPrime];  
            }   
        }  
    }  
    return null;  
}
登入後複製

以上就是 JavaScript趣題:質數之差的內容,更多相關內容請關注PHP中文網(www.php.cn)!


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!