查找并打印最大素数(JS)

时间:2018-10-25 17:35:21

标签: javascript node.js console console-application

我正在研究node.js,并且有一些有趣的任务-编写一个程序,查找并打印最大素数<= N。

输入//输出-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 :(得分:2)

我想这就是你想要的。您只需要声明一个函数并按需使用它即可。

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

答案 1 :(得分:0)

您非常接近。首先,您没有定义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之前必须先定义它。

答案 2 :(得分:0)

找到最接近素数的算法可以进一步优化。除数字2和3外,所有素数均采用6k + 1或6k-1的形式。此外,可以一直进行校验直到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;
}