【问题标题】:Find and print the biggest prime number (JS)查找并打印最大的素数 (JS)
【发布时间】:2018-10-25 17:35:21
【问题描述】:

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

输入 // 输出 - 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 确实有问题。

【问题讨论】:

  • 如果您定义了函数isPrime,您的代码在console.log(n); 语句之前看起来是正确的

标签: javascript node.js console console-application


【解决方案1】:

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

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

【讨论】:

  • 非常感谢。这就是我要找的。在我们对 JS 的学习“判断”中,我们有输入gets() 和输出pritn() 的命令。
【解决方案2】:

你已经很接近了。首先,您没有定义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,然后才能使用它。

【讨论】:

    【解决方案3】:

    寻找最近素数的算法可以进一步优化。除数字 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 2014-06-26
      • 2013-04-19
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多