Найдите и напечатайте наибольшее простое число (JS) - PullRequest
0 голосов
/ 25 октября 2018

Я изучаю node.js и у меня есть интересная задача - написать программу, которая находит и печатает наибольшее простое число, равное <= N. </p>

Input // Output - 13 // 13

126 // 113

26 // 23

В последнем курсе с Java у меня та же задача, и мой код очень прост:

import java.util.Scanner;

public class BiggestPrimeNumber {
    public static void main(String[] args){
        int n;
        Scanner in = new Scanner(System.in);
        n=in.nextInt();
        while(prim(n) == false){
            n--;
        }
        System.out.println(n);

    }


    public static boolean prim(int m){
        int n=m;
        for(int i=2;i<n;i++){
            if(n%i == 0){
                return false;
            }

        }
        return true;
    }
}

Я пытаюсь протестировать его аналогичным образом, но не знаю, как его конвертировать:

let n = 126;

while (isPrime(n) === false) {
    n -= 1;
}
console.log(n);

let n = m;
for (let i = 2; i < n; i += 1) {
    if (n % i === 0) {
        return false;
    }
}
return true;

Можете ли вы мне помочь, потому что у меня действительно проблемы с использованием js в консоли.

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Ты довольно близко.Во-первых, вы не определили isPrime.Во-вторых, если вы вставите весь свой код в консоль браузера, вам не понравится, что вы определяете n дважды.Я также убрал ваш isPrime бит кода.

let n = 100;
let result = n;

const isPrime = num => {
  for(let i = 2; i < num; i++)
    if(num % i === 0) return false;
  return num !== 1 && num !== 0;
}

while (isPrime(result) === false) {
    result -= 1;
}
console.log(result + " is the next prime below " + n);

Кроме того, помните, что javascript не является скомпилированным языком, поэтому, если вы не определяете свою функцию в классе, браузер будет интерпретировать код последовательно.Следовательно, вы должны определить isPrime, прежде чем использовать его.

0 голосов
/ 25 октября 2018

Алгоритм поиска ближайшего простого числа может быть дополнительно оптимизирован.Все простые числа имеют вид 6k + 1 или 6k-1, кроме чисел 2 и 3. Кроме того, вместо проверки всего пути к числу проверка может быть выполнена до Sqrt (n).Вот модифицированная функция isPrime:

let n = 126;

while (isPrime(n) === false) {
    n -= 1;
}
console.log(n);
function isPrime(num) {
    if (num <= 1) return false;
    if (num < 4) return true;
    if (num%2 === 0 || num%3 === 0) return false;
    for (var i = 5; i*i <= num; i+=6) {
        if (num % i === 0 || num % (i + 2) === 0) 
            return false; 
    }
    return true;
}
0 голосов
/ 25 октября 2018

Я думаю, это то, что вы хотите.Вам нужно только объявить функцию и использовать ее, как вы делаете.

let n = 126;

while (isPrime(n) === false) {
    n -= 1;
}
console.log(n);

function isPrime(m) {
    let n = m;
    for (let i = 2; i < n; i += 1) {
        if (n % i === 0) {
            return false;
        }
    }
    return true;
}

Если вы запустили его с NodeJS в консоли, вы можете сохранить его в файле с именем prime.js (например) и выполнить с помощью: node prime.js.

Вы можете передать параметры в скрипт как: node prime.js 126, а затем получить их в коде.Это будет что-то вроде этого:

const args = process.argv;

let n = args[2];

while (isPrime(n) === false) {
    n -= 1;
}
console.log(n);

function isPrime(m) {
    let n = m;
    for (let i = 2; i < n; i += 1) {
        if (n % i === 0) {
            return false;
        }
    }
    return true;
}
...