Основные номера JavaScript

Может кто-нибудь, пожалуйста, дайте мне руководство по получению здесь примеров? Это домашняя работа, поэтому я не хочу ответа, но некоторые указатели будут очень благодарны. Меня это очень раздражает:(

Я думаю, что я рядом. Но эти проблемы у меня есть числа 25 и 35. Они не простые, но эта функция возвращает их

var getPrimeNumber = function(n) {
    if(n === 1) return "";
    else if(n == 2) return 2;
    else if(n == 3) return 3;
    else { 
        for(i=Math.floor(Math.sqrt(n)); i>=2; i--){
            //console.log(i);//maybe another var in here? 
            if(n%i !==0 && n%2 !==0 && n%3 !== 0)
                return n; // 25/Math.sqrt(25) will be equal to zero this is what gives me 25 !!!   
        } 
    }
};

Ответ 1

На основе этой страницы это будет метод определения, является ли число простым числом:

function isPrime(number) {
    let start = 2;
    const limit = Math.sqrt(number);
    while (start <= limit) {
        if (number % start++ < 1) return false;
    }
    return number > 1;
}

В node.js она занимает около 250 мс для определения простых чисел от 2 до 100.000.

Смотрите также...

Ответ 2

Здесь самый быстрый способ вычисления простых чисел в JavaScript, основанный на предыдущем начальном значении.

function nextPrime(value) {
    if (value > 2) {
        var i, q;
        do {
            i = 3;
            value += 2;
            q = Math.floor(Math.sqrt(value));
            while (i <= q && value % i) {
                i += 2;
            }
        } while (i <= q);
        return value;
    }
    return value === 2 ? 3 : 2;
}

Test

var value, result = [];
for (var i = 0; i < 10; i++) {
    value = nextPrime(value);
    result.push(value);
}
console.log("Primes:", result);

Выход

Primes: [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]

Это очень быстро, потому что:

  • Он выравнивает предел цикла с целым числом;
  • Он использует более короткий цикл итерации, пропуская четные числа.

Он может дать вам первые 100 000 простых чисел примерно за 130 мс или первые 1 м числа за 4 секунды.

    function nextPrime(value) {
        if (value > 2) {
            var i, q;
            do {
                i = 3;
                value += 2;
                q = Math.floor(Math.sqrt(value));
                while (i <= q && value % i) {
                    i += 2;
                }
            } while (i <= q);
            return value;
        }
        return value === 2 ? 3 : 2;
    }

    var value, result = [];
    for (var i = 0; i < 10; i++) {
        value = nextPrime(value);
        result.push(value);
    }

    display("Primes: " + result.join(', '));

    function display(msg) {
        document.body.insertAdjacentHTML(
            "beforeend",
            "<p>" + msg + "</p>"
        );
    }

Ответ 3

Существует функция, которая вернет true, если число является простым и ложным, если это не так:

function isPrime(x){     
      d = x-1;
      while (d > 1){
        if ((x % d) == 0) return false;
        d--;
      }
      return true;
    }

Оформить демонстрацию: http://jsbin.com/velapabedi/1/

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  
  <script>
    function isPrime(x){     
      d = x-1;
      while (d > 1){
        if ((x % d) == 0) return false;
        d--;
      }
      return true;       
      
    }
    
    
    if (isPrime(41)){
      alert('Prime');
    }
    else{
      alert('Not Prime');
    }
  </script>
</head>
<body>

</body>
</html>

Ответ 4

Здесь простое "сито" для простых чисел, которое легко понять, и, хотя это наивный подход (в отличие от сложных эффективных тестов простых чисел, таких как тест AKS), оно довольно быстрое (10000 чисел, проверенных в <1 сек). Он сохраняет найденные простые числа в массиве prim[] и проверяет их с помощью функции по модулю (%):

Цикл проверяет уже найденные простые числа и завершается, если оно не является простым числом, т.е. Если по модулю результат равен 0 (с учетом выражения i % prim[j])===0). В противном случае он добавляет его в список найденных простых чисел.

Обратите внимание, что поскольку единственное четное простое число равно 2, шаг цикла равен 2, а не 1, потому что с 3 и далее не может быть дальнейших четных чисел.

var MaxNum = 10000;
var prim;

function Main() {
  MaxNum = GetMaxNum();
  prim = CalculatePrimes(MaxNum);
  CheckSome();
}

function CalculatePrimes(pMaxNum) {
  Console.WriteLine("Calculating until " + pMaxNum + "...");
  var _prim = [2];
  if (pMaxNum > 2) {
    for (var i = 3; i < pMaxNum; i += 2) {
      var is_prim = true;
      if (_prim.length > 0) {
        for (var j = 0; j < _prim.length; j++) {
          if ((i % _prim[j]) === 0) {
            is_prim = false;
            break;
          }
        }
      }
      if (is_prim) {
        _prim.push(i);
      }
    }
  }
  Console.WriteLine("Prime numbers:");
  for (var i = 0; i < _prim.length; i++) {
    Console.Write(_prim[i] + " ");
  }
  Console.WriteLine();
  Console.WriteLine("Found " + _prim.length + " prime numbers.");
  Console.WriteLine();
  return _prim;
}

// test some individual pre-calculated numbers

function CheckSome() {
  var num1 = prim[prim.length - 1];
  var num2 = num1 - 1;
  Console.WriteLine("Test: " + num1.toString() + ". Is it a prime number? " + Is_prime(num1));
  Console.WriteLine("Test: " + num2.toString() + ". Is it a prime number? " + Is_prime(num2));
}

function Is_prime(n) {
  if (n > MaxNum) throw "ERROR: n must be <" + MaxNum + "!";
  if (prim.indexOf(n) === -1)
    return false;
  else
    return true;
};


// ------------ HELPERS to display on screen ------------
var Console = {
  Section: 1,
  SectionId: "#section1",
  NewSection: function() {
    var $currentSection = $(this.SectionId);
    this.Section++;
    this.SectionId = "#section" + this.Section.toString();
    $currentSection.before('<div id="section' + this.Section.toString() + '"></div>');
  },
  Write: function(str) {
    $(this.SectionId).append(str);
  },
  WriteLine: function(str) {
    if (str !== undefined && str !== null && str !== "") this.Write(str);
    this.Write("<br/>");
  }
};


var GetMaxNum = function() {
  var result = $("#MaxNumSelect option:selected").val();
  return result;
}

$(document).ready(function() {
  $("#MaxNumSelect").change(function() {
    MaxNum = GetMaxNum();
    Console.NewSection();
    Main();
    Console.WriteLine("---------------------------------");
  });
  Main();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Select max number:&nbsp;
  <select id="MaxNumSelect">
    <option value="10000" default="default">10000</option>
    <option value="100">100</option>
    <option value="1000">1000</option>
    <option value="100000">100000</option>
  </select>
</div>

<div id="results">
  <div id="section1"></div>
</div>

Ответ 5

В моей реализации я учел следующее: простые числа являются "натуральными числами", и отрицательные значения могут быть простыми числами. Это более определенное решение с входной санитарией:

function isPrime(num) {
    //check if value is a natural numbers (integer)
    //without this check, it returns true
    if (isNaN(num) || num % 1 !== 0) {
        return false;
    }
    num = Math.abs(num); //*negative values can be primes
    if (num === 0 || num === 1) {
        return false;
    }
    var maxFactorNum = Math.sqrt(num);
    for (var i = 2; i <= maxFactorNum; i++) {
        if (num % i === 0) {
            return false;
        }
    }
    return true;
}

//this method in action
for (var i = 1; i <= 40; i++) {
    console.log(i + (isPrime(i) ? ", isPrime" : ""));
}
//checking anomalies
console.log(isPrime(1.22));
console.log(isPrime(1.44));
console.log(isPrime("string"));

Ответ 6

Вы должны вернуть значение bool, а новая функция может быть:

function(n) {
    if(n === 1) { return false;}
    else if(n == 2) { return true;}
    else if(n == 3) { return true;}
    else { 
        for(i=Math.floor(Math.sqrt(n));i>=2;i--){
            //console.log(i);//maybe another var in here? 
                if(n%i ==0 || n%2 ==0 || n%3 == 0) {return false;} 
        } 
        }
    return true;
};

В OP элемент управления if(n%i !==0 && n%2 !==0 && n%3 !== 0) {return n;} был проблематичным, потому что даже если только одно i удовлетворяет этому условию, функция возвращает число как простое.

Ответ 7

В вашем операторе if вы получили

if(n%i !==0 && n%2 !==0 && n%3 !== 0)

вы для цикла продолжаете до я >= 2, поэтому n% 2! == 0 бесполезно, когда я = 2, ваш if будет выглядеть следующим образом:

if(n%2 !==0 && n%2 !==0 && n%3 !== 0)

Thats 2x одна и та же проверка, то же самое для n% 3, ее уже проверено:).

вы должны оставить bool для проверки n% i! == 0, если он никогда не достигнет этого, это простое.

Удачи вам в домашнем задании:).

Ответ 8

function isPrime(number) {

  // Immediate exit cases
  switch(true){
    case (number < 2):
      return console.log("Please enter a number greater than or equal to 2.")
    case (number === 2 || number === 3):
      return console.log(number + " is a prime number!")
  }

  // Process number if it does not meet above requirements
  var num = Math.floor(Math.sqrt(number))

  for(var i = 2; i <= num; i++) {
    if(number % i === 0)
      return console.log(number + " is not a prime number")
    else
      return console.log(number + " is a prime number!")
  } 
}

isPrime(27) // 27 is a prime number!
isPrime(30) // 30 is not a prime number
isPrime(55) // 55 is a prime number!
isPrime(2)  // 2 is a prime number!

Ответ 9

Это должно помочь

//just saw that this only works for prime numbers not larger than 100
var num = 100;
function PrimeNum(num){
 var P = [2, 3, 5, 7];
    for (var i=8; i<=num; i++){
        if (i%P[0]!==0 && i%P[1]!==0 && i%P[2]!==0 && i%P[3]!==0){
            P.push(i);
        }
    }
    console.log(P);
}
PrimeNum(num);

Ответ 10

Это мой ответ!

var isPrime = function (n) {
  if (n<2) {
    return false
  }else if (n = 2) {
    return true
  }
  for (var i = 2; i < n; i++) {
    if (n%i === 0) {
      return false
    }else if (i === n-1) {
      return true
    }
  }
}
console.log(isPrime(7));

Ответ 11

Вы хотите знать, как определить число является простым или составным. Этот код позволяет легко понять. Вход от номера 2.

var p = prompt("Insert a number for check","");
var x = " is a prime number";
for(i=2; i<p; i++){
    if(p%i === 0){
        x = " is a composite number";
        break;
    }
}
alert(p+x);