我正在尝试编写一个返回 PrimeNumber 的函数。出于测试目的,我只是为这个功能的各个阶段做一个 console.log,以尝试更好地理解它。所以我的总函数中的这一行(行:18)将只返回 i; 而不是做一个console.log所以基本上,30将被传递给函数,函数将返回每个质数<=30。
它基于来自wiki的内容:该例程包括将 n 除以每个大于 1 且小于或等于 n 的平方根的整数 m。如果任何这些除法的结果是整数,则 n 不是素数,否则它是素数。
(这里的问题:25/Math.sqrt(25) = 0,因此 NotPrime BUT 25/2=12.5, 25/3=8.3333 25/4=6.25 => IsPrime 因为 12.5 不是整数或者我在这里遗漏了什么? ??)
还有重复的问题: 13 打印了两次,因为 13/2 和 13/3 被执行了。这里的问题:我也想修复这个重复?
function isInt(n) {
return n % 1 === 0;
}
var test = 25
console.log(Math.sqrt(test));
function prime(n) {
for(var i = 1; i <= n; i++)
{ if(i%2 !==0 && i%3 !==0){ // if i/2 does not have a remainder it might be a prime so go to next line else jump
to next number and i%3 the same
var a = Math.floor(Math.sqrt(i));
for(j = 2; j<=a; j++){
console.log(i + "/" + j); //print j//it prints 9 twice and 10 twice
console.log("==" + i/j); //because the sqrt of 9 = 3 =>
for j= 2 and j=3
if(isInt(i/j)) {}
else{console.log("----" + i + "is Prime");}
}
}
}
};
prime(test);
此处使用稍微不同的方法的另一个示例:但我再次遇到与上述 25 相同的问题和重复
var test = 25
console.log(Math.sqrt(test));
for(var i = 1; i <= test; i++)
{ if(i%2 !==0 && i%3 !==0){ // if i/2 does not have a remainder it might be a prime so go to next line else jump to next number and i%3 the same
var a = Math.floor(Math.sqrt(i));
for(j = 2; j<=a; j++){
console.log(i + "%" + j); //print j//it prints 9 twice and 10 twice
console.log("==" + i%j); //because the sqrt of 9 = 3 => for j= 2 and j=3
if(i%j !==0) {
console.log("----" + i + "is Prime");
}
}
}
}
[编辑]非常感谢大家指出我的缺陷/错误,这是我的工作示例。再次感谢大家!!
function isInt(n) {
return n % 1 === 0;
}
var test = 100
console.log(Math.sqrt(test));
function prime(n) {
for (var i = 1; i <= n; i++) {
var a = Math.floor(Math.sqrt(i));
var bool = true;
for(j = 2; j<=a; j++) {
if(!isInt(i/j)) {
//console.log(i+"/"+j+"=="+i/j+", therefore "+i+" is Prime");
} else {bool = false;}
}
if(bool) {console.log(i+"/"+j+"=="+i/j+", therefore "+i+" is Prime");}
}
}
prime(test);