我正在研究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确实有问题。
答案 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;
}