Javascript 如何在输入的数字范围内查找素数

Javascript 如何在输入的数字范围内查找素数,javascript,arrays,primes,Javascript,Arrays,Primes,我只是想找到一系列输入数字的素数。我不知道如何计算素数。我需要将它们添加到数组中,然后输出数组。我为计算放了一个占位符。。。我只是不知道如何找到素数 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="con

我只是想找到一系列输入数字的素数。我不知道如何计算素数。我需要将它们添加到数组中,然后输出数组。我为计算放了一个占位符。。。我只是不知道如何找到素数

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />

        <title>LeapYears</title>

        <script type="text/javascript">
        /* <![CDATA[ */

        function calcPrimeNumber(){

                var beginNum = document.numbers.firstNum.value;
                var endNum = document.numbers.secondNum.value;
                var primeNumbs = new Array();


                var ctr = 0;
                while (beginNum <= endNum){ //throwaway
                    if ((beginNum % beginNum == 0) && (beginNum % 1 == 0)){
                        primeNumbs[ctr] = beginNum;
                        ++ctr;
                    }

                    ++beginNum;
                }

                if (primeNumbs == 0){
                    window.alert("There were no leap years within the range.");
                }

                else {
                    outputPrimeNums(primeNumbs);
                }

        }

        function outputPrimeNums(primes){
            document.write("<h2>Prime Numbers</h2>");
            for (i=0;i<primes.length;i++){
                    document.write(primes[i] + "<br/>");
                }

        }


        /* ]]> */
        </script>


    </head>


    <body>
        <form name="numbers">

            Beginning Number: <input type="text" name="firstNum" /> End Number: <input type="text" name="secondNum" /> 
            <input type="button" value="Find Prime Numbers" onclick="calcPrimeNumber()" />

        </form>

    </body>


</html>

您应该使用一些算法来检查给定的no在while循环中是否为prime no。

这里需要两个循环—第一个循环在beginNum和endNum之间运行,第二个循环在外部循环中的每个beginNum值从1运行到beginNum

尝试用以下内容替换代码的主要部分。为了清楚起见,我将引入一个新的变量-numberBeingTested

注意这里有很多可能的改进-首先,这段代码将告诉您1是素数,还有一些可能的显著性能改进,比如测试可能的除数,直到被测试数字的平方根,而不是数字本身——但对于您来说,这可能就足够了。

我尝试从以下内容编辑:


这将为您提供从最小到最大的素数数组。它仍然需要遍历从2开始的所有数字,因此可能会有更有效的方法来实现这一点。

尝试这一整页素数无示例

<html>

    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />

        <title>LeapYears</title>

        <script type="text/javascript">
        /* <![CDATA[ */

        function calcPrimeNumber(){

                var beginNum = parseInt(document.numbers.firstNum.value);
                var endNum = parseInt(document.numbers.secondNum.value);
                var primeNumbs = new Array();


                var ctr = beginNum;
                while(ctr<=endNum)
                {
                    if(isPrime(ctr)==true)
                    {
                        primeNumbs[primeNumbs.length] = ctr;
                    }
                    ctr = ctr+1;

                }

                if (primeNumbs.length == 0){
                   document.getElementById('output_content').innerHTML = "There were no prime no within the range.";
                }

                else {
                    outputPrimeNums(primeNumbs);
                }

        }

        function isPrime(num)
        {
            var flag = true;
            for(var i=2; i<=Math.ceil(num/2); i++)
            {
                if((num%i)==0)
                {
                    flag = false;
                    break;
                }
            }
            return flag;    
        }

        function outputPrimeNums(primes){
            var html = "<h2>Prime Numbers</h2>";
            for (i=0;i<primes.length;i++){
                    html += primes[i] + "<br/>";
                }
            document.getElementById('output_content').innerHTML = html;
        }


        /* ]]> */
        </script>


    </head>


    <body>
        <form name="numbers">

            Beginning Number: <input type="text" name="firstNum" /> End Number: <input type="text" name="secondNum" /> 
            <input type="button" value="Find Prime Numbers" onclick="calcPrimeNumber()" />

        </form>
        <div id="output_content">
        </div>
    </body>


</html>

如果输入的范围不是从0开始,我怎么才能找到质数呢?@user3027217你试过我的答案了吗谢谢,你说得很清楚。这不是阿特金的筛子,而是埃拉托什尼的筛子抱歉,维基百科页面上的j=i是错误的建议那里的代码非常糟糕,而且速度非常慢。它显示了小于1 mln的素数的计时时间为5.6秒,但对于最快的平面Python代码,它的计时时间为0.07秒。没错,80倍的速度是很多的,即使在不同的计算机上。这意味着你认为应该有人为这个简单的任务编写代码。检查给定的no是否为素数。您标记为答案的上述代码的运行时间是多少。我不是OP,我不可能将答案标记为已接受这只是OP要做的事
function getPrimes(min, max) {
    var sieve = [], i, j, primes = [];
    for (i = 2; i <= max; ++i) {
        if (!sieve[i]) {
            // i has not been marked -- it is prime
            if (i >= min) {
                primes.push(i);
            }
            for (j = i << 1; j <= max; j += i) {
                sieve[j] = true;
            }
        }
    }
    return primes;
}

console.log(getPrimes(10, 100));
<html>

    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />

        <title>LeapYears</title>

        <script type="text/javascript">
        /* <![CDATA[ */

        function calcPrimeNumber(){

                var beginNum = parseInt(document.numbers.firstNum.value);
                var endNum = parseInt(document.numbers.secondNum.value);
                var primeNumbs = new Array();


                var ctr = beginNum;
                while(ctr<=endNum)
                {
                    if(isPrime(ctr)==true)
                    {
                        primeNumbs[primeNumbs.length] = ctr;
                    }
                    ctr = ctr+1;

                }

                if (primeNumbs.length == 0){
                   document.getElementById('output_content').innerHTML = "There were no prime no within the range.";
                }

                else {
                    outputPrimeNums(primeNumbs);
                }

        }

        function isPrime(num)
        {
            var flag = true;
            for(var i=2; i<=Math.ceil(num/2); i++)
            {
                if((num%i)==0)
                {
                    flag = false;
                    break;
                }
            }
            return flag;    
        }

        function outputPrimeNums(primes){
            var html = "<h2>Prime Numbers</h2>";
            for (i=0;i<primes.length;i++){
                    html += primes[i] + "<br/>";
                }
            document.getElementById('output_content').innerHTML = html;
        }


        /* ]]> */
        </script>


    </head>


    <body>
        <form name="numbers">

            Beginning Number: <input type="text" name="firstNum" /> End Number: <input type="text" name="secondNum" /> 
            <input type="button" value="Find Prime Numbers" onclick="calcPrimeNumber()" />

        </form>
        <div id="output_content">
        </div>
    </body>


</html>