代码之家  ›  专栏  ›  技术社区  ›  user3027217

如何在输入的数字范围内查找质数[重复]

  •  1
  • user3027217  · 技术社区  · 11 年前

    我只是想在输入的数字范围内找到素数。我不知道如何计算求素数。我需要将它们添加到数组中,然后输出数组。我在计算中放置了占位符。。。我只是不知道怎么找到素数。

    <!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>
    
    4 回复  |  直到 11 年前
        1
  •  0
  •   Satish Sharma    11 年前

    试试这整页的prime no example

    <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>
    
        2
  •  0
  •   john    11 年前

    您应该使用一些算法来检查给定的no是否在while循环内是质数no。 http://en.wikipedia.org/wiki/Prime_number

    http://en.wikibooks.org/wiki/Efficient_Prime_Number_Generating_Algorithms

        3
  •  0
  •   Neil T    11 年前

    这里需要两个循环 -第一个在 beginNum endNum 第二个从1到 开始编号 对于外部循环中beginNum的每个值 .

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

    var ctr = 0;
    var numberBeingTested = beginNum;
    
    while (numberBeingTested <= endNum){ //throwaway
    
        var testDivisor = 2;
        var isPrime = true;
    
        while (testDivisor < numberBeingTested ){ //throwaway
            if (numberBeingTested % testDivisor == 0) {
                isPrime = false;
            }                    
    
        ++testDivisor;
        }
    
        if (isPrime){
            primeNumbs[ctr] = numberBeingTested;
            ++ctr;
        }
    
        ++numberBeingTested;
    }
    

    请注意,这里有很多可能的改进-首先,这段代码会告诉你1是质数,并且可能会有显著的性能改进(例如测试可能的除数,直到被测数字的平方根,而不是数字本身)-但对于您的目的来说,这可能就足够了。

        4
  •  0
  •   Community CDub    8 年前

    我试图编辑 Sieve of Atkin algorithm 从…起 linked question :

    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));
    

    这将为您提供一个数组,其中包含 min max 。它仍然需要通过从2开始的所有数字,因此可能会有更有效的方法来实现这一点。