0

我试图在表格中显示 1-999 的素数,但我无法在网上或其他任何地方找到简单的答案。

这是书中的问题:

素数是一个只能被它自己或被一整除的数字。素数的示例包括 1、3、5、13 和 17。编写一个脚本,在由 10 列组成的表中打印 1 到 999 之间的素数。您将需要使用几个循环和条件语句来测试所有除法的可能性。使用 document.write() 语句创建表格元素,使用计数器变量创建表格,使其包含 10 列。计数器变量应该从初始值 0 开始,每次代码识别素数并将其打印在表格单元格中时递增 1。一旦计数器变量的值达到 10(意味着 10 个单元格已添加到当前行),打印</tr><tr>开始新行并将变量重置为 0。将文档另存为 PrimeNumbers.html。

任何帮助是极大的赞赏!我真的坚持这个。

4

3 回答 3

3

我要回答这个问题,告诉你应该怎么做,因为你的那本书很糟糕。

首先,永远不要使用document.write. 这是一个过时的功能,并且存在许多更好的替代方案。

首先,让我们定义一个函数来测试一个数字是否为素数:

function isPrime(n) {
    if( n < 2) return false;
    // a number is prime if it is divisible only by 1 and itself.
    // so, let's check it
    var rt = Math.sqrt(n), i;
    for( i=2; i<=rt; i++) {
        if( n%i == 0) {
            // the number is divisible by something else.
            return false;
        }
    }
    return true;
}

现在,我们构建我们的主要逻辑。首先,我们需要一个表:

var tbl = document.createElement('table'),
    tbd = tbl.appendChild(document.createElement('tbody')),
    tr, td, i, found = 0;

我还定义了我们需要的变量。现在我们继续循环,看看我们得到了什么:

for( i=2; i<1000; i++) { // we can start at 2, because as I said earlier 1 is not prime
    if( isPrime(i)) {
        // if the number of found numbers is a multiple of 10, start a new row
        // the first prime we find will be "number 0", which is divisible by 10.
        if( found % 10 == 0) tr = tbd.appendChild(document.createElement('tr'));
        td = tr.appendChild(document.createElement('td'));
        td.appendChild(document.createTextNode(i));
        found++;
    }
}

为了符合标准,最后一行必须包含完整的 10 个单元格。在这里,我用 colspan'd 单元格“填充”它

if( found % 10 != 0) {
    td = tr.appendChild(document.createElement('td'));
    td.colSpan = 10 - found % 10;
}

最后,我们将表格添加到页面中:

document.body.appendChild(tbl);

完毕!这是它的实际演示!

于 2013-11-08T20:47:26.870 回答
2

这是获取1 - 999 内的素数的简单示例

var i, 
    prime, 
    upper = 999,
    lower = 1,
    n;

for (n = lower + 1; n < upper; n++) {
    prime = 1;
    for (i = 2; i < n; i++)
    if (n % i == 0) {
        prime = 0;
        break;
    }
    if (prime) {
        console.log(n);
    }
}

将这些值附加到表中。

于 2013-11-08T20:53:57.677 回答
1

Just to get prime numbers:

function is_prime(n)
{
    if ((n < 2) || ((n % 2) == 0)) {
        return (n == 2);
    }

    for (f = 3; (f * f) <= n; f += 2) {
        if ((n % f) == 0) {
            return false;
        }
    }

    return true;
}

var primes = [];

for (n = 1; n < 1000; n++) {
    if (is_prime(n)) {
        primes.push(n);
    }
}

console.log(primes);

Good luck!

于 2013-11-08T20:58:20.137 回答