2つの正の整数を受け入れ、それらの間の最大の素数を返すjavascript関数を書き込もうとすると、適切なエラーメッセージが返されます。たとえば、入力番号が50と75の場合、出力は73になり、入力番号は-50になります。 、-75、出力はエラーメッセージである必要があります。
しかし、なぜ私のコードが最大の奇数を返すのかわかりません。
これが私のコードです:
function highestPrimeInRange(int1, int2) {
if (int1 <= 0 || int2 <= 0) {
alert("Both numbers should be positive and non 0");
}
let highestPrime;
for (let i = int1; i <= int2; i++) {
let primeFlag = true;
for (let j = 2; j <= i / 2; j++) {
if (i % j == 0) {
primeFlag = false;
break;
}
if (primeFlag) {
highestPrime = i;
}
}
}
alert(highestPrime);
}
highestPrimeInRange(50, 75);
誰かが私が間違っているところを手伝ってくれませんか?
更新するコードhighestPrime
はj
ループの外側にある必要があります。また、素数検出コードを続行するのではなく、入力が範囲外の場合に関数から戻る必要があります。
function highestPrimeInRange(int1, int2) {
if (int1 <= 0 || int2 <= 0) {
alert("Both numbers should be positive and non 0");
return;
}
if (int1 >= int2) {
alert("First number should be less than second");
return;
}
let highestPrime;
for (let i = int1; i <= int2; i++) {
let primeFlag = true;
for (let j = 2; j <= i / 2; j++) {
if (i % j == 0) {
primeFlag = false;
break;
}
}
if (primeFlag) {
highestPrime = i;
}
}
alert(highestPrime);
}
highestPrimeInRange(50, 75);
highestPrimeInRange(-50, -75);
highestPrimeInRange(10, 100);
ただし、最大数からループダウンし、最初の素数を取得したら停止することをお勧めします。
function highestPrimeInRange(int1, int2) {
if (int1 <= 0 || int2 <= 0) {
alert("Both numbers should be positive and non 0");
return;
}
if (int1 >= int2) {
alert("First number should be less than second");
return;
}
for (let i = int2; i >= int1; i--) {
let primeFlag = true;
for (let j = 2; j <= i / 2; j++) {
if (i % j == 0) {
primeFlag = false;
break;
}
}
if (primeFlag) {
alert(i);
break;
}
}
}
highestPrimeInRange(50, 75);
highestPrimeInRange(-50, -75);
highestPrimeInRange(10, 100);
素数かどうかをテストするためのより効率的な方法もあります。奇数をテストするだけで、奇数の因数による除算をチェックするだけでよく、Math.sqrt(i)
ではなくまでテストするだけで済みますi/2
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加