前幾天看一個故事:html
1970年,贊比亞的瑪麗·尤肯達修女給當時NASA太空航行中心的科學副總監恩斯特·史都林格博士寫信問道:「目前地球上還有這麼多小孩子吃不上飯,你怎麼還能捨得爲遠在火星的項目花費數十億美圓?」算法
史都林格很快給瑪麗·尤肯達修女回了信。大意是,不少看起來暫時無用的基礎科學研究,其實才是推進生產力和人類進步的最大力量。他這封真摯的回信隨後由NASA以《爲何要探索宇宙》爲題發表。數組
高中上學的時候,學了不少當時以爲很無聊的東西,好比矩陣。感受數學家們吃飽了撐得搞這些數字遊戲。後來本身接觸了遊戲行業,才知道原來這些枯燥無味的數字真的可以解決不少實際問題。好比計算機圖形學,根本就離不開矩陣運算。app
質數,可能不少人只是知道它的一個定義。可是咱們爲何要在一堆天然數中尋找質數呢,這其實最先源於古希臘數學家們的直覺。從乘法的角度看,這些質數是最小的單位了,不能再被分解成兩個因數。而這樣特殊的一個數字羣體,總有他特殊的意義。dom
就像咱們的宇宙,存在着一些常數,普朗克常數,法拉第常數等等。那麼是否有另一個宇宙,存在着與咱們不一樣各類常數呢?咱們找到了這些特殊的數字,對理解咱們所生活的世界是有很大幫助的。測試
那麼如何取得質數呢?有不少種方法,最適合計算機的應該是埃拉托色尼篩法:ui
首先,列出從2開始的數。而後,將2記在素數列表上,再劃去全部2的倍數。根據定義,剩下的最小的數——在這裏是3——一定是素數。將這個數記在素數列表上,再劃去全部它的倍數,這樣又會剩下一些數,取其中最小的,如此反覆操做。最後剩下的都是素數。編碼
做爲一個碼農,我固然得把算法轉換爲代碼:spa
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" /> <title>prime</title> <style> #wrap{ width:320px; margin:0 auto; text-align: center; } #output{ text-align:left; } var{ color:red; } </style> </head> <body> <div id="wrap"> <h1>算質數</h1> <br> <div> <input id="max" type="text" />之內的質數 <input type="button" id="button" value="計算" /> </div> <br> <div id="output"></div> </div> <script> var button_dom=document.getElementById("button"); var max_dom=document.getElementById("max"); var output_dom=document.getElementById("output"); button_dom.onclick=function(){ var value=max_dom.value; output_dom.innerHTML="<var>計算中...</var>"; if(value){ //獲取質數數組 var startTime=(new Date()).getTime(); var arr=getPrime(parseInt(value)); var nowTime=(new Date()).getTime(); var time=(nowTime-startTime)/1000; // var str=arrToString(arr); str="<strong>"+value+"</strong> 之內的質數有<strong> "+arr.length+" </strong>個:<var>(計算耗時"+time+"秒)</var><br>"+str; // output_dom.innerHTML=str; }else{ output_dom.innerHTML="<var>請輸入素數的範圍</var>"; } } function arrToString(arr){//數組轉化爲字符串 return arr.join(" "); } function getPrime(max){//獲取max之內的質數 var num=[]; var prime=[]; for(var i=2;i<=max;i++){ num[i-2]=i; } for(var i=0;i<num.length;i++){ if(num[i]===0){continue;} var key=num[i]; prime.push(key); deleByKey(num,key); } return prime; } function deleByKey(arr,key){//刪除數組內可以被key整除的數 var len=arr.length; for(var i=len-1;i>=0;i--){ if(arr[i]%key===0){ arr[i]=0; } } } </script> </body> </html>
測試地址:scala
http://sjusttest.sinaapp.com/prime.html
最後順帶爲ie9默哀: