如何在每个表行上打印10个素数

时间:2014-08-30 15:27:12

标签: javascript html

我正在编写一个JavaScript,它在一个包含10列的表中打印1到999之间的素数。

一旦计数器变量达到值10(意味着已将10个单元格添加到当前行),我打印</tr><tr>以开始新行并将变量重置为0。 我一直在尝试,我设法打印表中的素数,但现在每10列后创建一个新行是我失败的地方。

任何帮助将不胜感激。

以下是我的代码。

<html>
    <head>
        <script language="javascript">
            document.write("<table border='1'>");
            document.write("<tr>");
            for(n = 0 ; n < 1000; n++){
                var x=1;
                if(n==0 || n==1) x=0;
                for(i=2;i<n;i++)
                {
                    if(n%i==0)
                    {
                        x=0;
                        break;
                    }
                }
                if(x==1)
                {
                    document.write("<td>"); 
                    // if prime print the numbers 
                    document.write(n);
                    document.write("</td>");
                }
                else
                { 
                // if not prime number do nothing 
                }
            }  
            document.write("</table>");
        </script>
    </head>
    <body>
   </body>
</html>

3 个答案:

答案 0 :(得分:1)

在循环之前创建计数器:

var cnt = 0;

在写出单元格之前,增加计数器并检查值:

if(x==1)
{
  cnt++;
  if (cnt == 10)
  {
    cnt = 0;
    document.write("</tr><tr>");
  }
  document.write("<td>"); 
  document.write(n);
  document.write("</td>");
}

此外,您在关闭表格之前忘记关闭最后一行:

document.write("</tr>");
document.write("</table>");

答案 1 :(得分:1)

我删除了您的else部分,并使用ok来计算素数。 如果此计数器为10,20,30,...(ok % 10 === 0 && ok > 0),则使用<\tr>关闭实际行,然后使用<tr>打开新行。

<html>
    <head>
        <script language="javascript">
            document.write("<table border='1'><tr>");
            var ok = 0 ;
            for(n = 0 ; n < 1000; n++) {
                var x=1;
                if(n==0 || n==1) x=0;
                for(i=2 ; i<n ; i++) {
                    if(n%i==0) {
                        x=0;
                        break;
                    }
                }
                if(x==1) {
                  if ( ok % 10 === 0 && ok > 0 ) {
                     document.write("</tr><tr>");
                  }
                  document.write("<td>"); 
                  document.write(n);
                  document.write("</td>");
                  ok++;
                }
            }  
            document.write("</tr></table>");
        </script>
    </head>
    <body>
    </body>
</html>

答案 2 :(得分:0)

您可以使用筛选算法,例如1000

function getPrimes(max) {
    var sieve = [], i, j, primes = [];
    for (i = 2; i <= max; ++i) {
        if (!sieve[i]) {
            // i has not been marked -- it is prime
            primes.push(i);
            for (j = i << 1; j <= max; j += i) {
                sieve[j] = true;
            }
        }
    }
    return primes;
}

然后

for(n = 0 ; n < 100; n++){
    if(n % 10 == 0)