跟上一支程式一樣的表現,但程式是完全不同的寫法。
以下的範例,理論上可以檢測出無限多的質數。
用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 p =new Array();
p[0]=0;
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>";
p[n]=n;
}
html+="</tr>";
}
html+="</table>";
get_table_1.innerHTML=html;
document.getElementById(1).innerHTML="<divclass='special'>1</div>";
var max=(line*10);//共line*10 個數
var total_num=1;//已有的質數,1
//從2開始,一直到最後
for(i=2; i<=max; i++){
for(k=i;k<=max;k++){
//檢查k,k為0的話,K向後移動
//直到k=0,k為質數,並且把i的起點改為k
if(p[k]!=0){
total_num++;
document.getElementById(k).innerHTML="<divclass='special'>"+k+"</div>";
i=k;
break;
}
}
//起點為k,把所有k的倍數都改為0,直到最後
for(j=k;j<=max; j=j+k){
p[j]=0;
}
}
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>