2009年2月2日 星期一

1~100的質數有幾個?分別是哪些?(1)

以下的範例,理論上可以檢測出無限多的質數。
用FF實測到100000,也只要20多秒。

<html>
<head>
  <style type="text/css">
    .special {
     background-color:#FF0000;
      color:#FFFFFF;
      font-weight: bold ;
    }
  </style>
</head>
<body>
<script>


function make_table(){
        var line= document.getElementById("line").value;
        varget_table_1 = document.getElementById("table_1");
        varhtml="<table align='center' border='1' width='80%'>";

        var n=0;
        for(j=0;j<line ;j++ )
        {
           html+="<tr>";

           for (i=0;i<10 ;i++ )
           {
              n=(j*10+i+1) //列出數字n,並設上ID
              html+="<td align='center'><span id='"+ n+"'>"+n+"</span></td>";
           }
           html+="</tr>";
        }

       html+="</table>";
       get_table_1.innerHTML=html;
    


   document.getElementById(1).innerHTML="<divclass='special'>1</div>";
   document.getElementById(2).innerHTML="<divclass='special'>2</div>";
   document.getElementById(3).innerHTML="<divclass='special'>3</div>";
    
    var max=(line*10);//共line*10 個數
    var total_num=3;//已有的質數,1,2,3

    //跳過2的倍數不檢查 x=x+2
    for (x=5;x<=max ;x=x+2 )
    {
        
        var check= true;
        
        //方案一
       //一個數字的最大因數為其二分之一,y<=((x+(x%2))/2)
        //for(vary=2; y<=((x+(x%2))/2); y++)
        
        //方案二
       //因為整數平方根之後的因數,與後方重複,所以算到平方根取整數即可,比方案一更快
       //如100=10x10; 10是平衡點, 之後25x4=4x25;
       //從三開始,跳過2的倍數,到x的平方根為止,可整除x的話,x不是質數,否則為質數
        for(vary=3; y<=Math.sqrt(x); y=y+2)
        {
           if (x%y == 0)
           {
              check = false;
              break;
           }
        }
        if(check)
        {
           total_num++;
          document.getElementById(x).innerHTML="<divclass='special'>"+x+"</div>";
        }
        
    }

    get_table_1.innerHTML+="<palign='center'>共 "+total_num+" 個質數</p>";
}    
</script>
 


請問希望做 10 X <input type="text" id="line" />的質數表格?
<input type="button" value="開始製作" onClick="make_table()"/>
<br /><br />
<div id="table_1"></div>

</body>
</html>