PrimeNumber を返す関数を作成しようとしています。テスト目的で、この関数の段階で console.log を実行して、よりよく理解しようとしています。したがって、私の total 関数のこの行 (行:18) は単に i; を返します。console.log を実行するのとは対照的に、基本的に、30 が関数に渡され、関数はすべての素数 <=30 を返します。
wikiのこれに基づいています: このルーチンは、1 より大きく、n の平方根以下の各整数 m で n を除算することで構成されます。これらの除算のいずれかの結果が整数の場合、n は素数ではなく、そうでない場合は素数です。
(ここでの質問: 25/Math.sqrt(25) = 0、したがって NotPrime BUT 25/2=12.5, 25/3=8.3333 25/4=6.25 => IsPrime as 12.5 is not an integer または、ここで何かが間違っていますか? ??)
重複の問題もあります。13/2 と 13/3 が実行されるため、13 が 2 回出力されます。ここで質問: この重複も修正したいですか?
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);