我想寫一個腳本,顯示從0到100的素數,但是當我執行它時,瀏覽器崩潰。 JSHint沒有檢測到任何錯誤。使用Javascript尋找素數
我想了解爲什麼此代碼無效:我無意找到完成相同任務的完全不同的代碼(like this one)。
這是我寫過的第一個代碼,所以我提前道歉所有我忽略的愚蠢錯誤。
var i;
var m;
var primeArr = [2, 3, 5, 7, 11, 13, 17, 19];
var theMaxNumber = 100;
var theMinNumber = 21;
var theCounter = -1;
function myFunction() {
for (i = theMinNumber; i < theMaxNumber; i += 2) {
for (m = 0; m < primeArr.length; m++) {
if (i % primeArr[m] !== 0) {
theCounter++;
if (theCounter === primeArr.length) {
primeArr.push(i);
}
if (m === primeArr.length) {
theCounter = -1;
}
}
}
}
console.log(primeArr.toString());
}
這是應該如何在理論工作:
1)功能找出是否不是數字我整除的素數較小然後自己。
2)情況下,它是,theCounter被重置了與我由兩個遞增。
3)如果不是,theCounter增加1。如果在週期結束時,對於小於其自身的所有素數都不是可分性的,則意味着它是素數:i被推入陣列中(因爲theCounter = == primeArr。長度),則i增加2。
編輯:我固定在代碼中的所有錯誤,現在完美的作品:
var i;
var m;
var primeArr = [3, 5, 7, 11, 13, 17, 19];
var theMaxNumber = 100;
var theMinNumber = 21;
var theCounter = 0;
function myFunction() {
for (i = theMinNumber; i < theMaxNumber; i += 2) {
theCounter = 0;
for (m = 0; m < primeArr.length; m++) {
if (i % primeArr[m] !== 0) {
theCounter++;
}
if (theCounter === primeArr.length) {
primeArr.push(i);
}
}
}
primeArr.unshift(2);
console.log(primeArr.toString());
}
在紙上播放。只有在'i%primeArr [m] == 0'的時候做某件事纔有意義,因爲你已經找到了一個因素。 JavaScript是快速和良好學習的不幸選擇。也許主流的java會做。 _(意見)_ –
您爲素數定義的數組已經只包含質數。你在這裏找到什麼?在這行代碼if(i% > primeArr [m]!== 0){ w ++; - >嘗試增加一個未聲明的變量。 –
我不小心寫了_w_而不是_theCounter_,謝謝你的評論。我編寫了這行代碼,以便爲列表中的每個素數分配_i_。如果_i_中的任何一個都不能被整除(模數不爲0),則意味着它也是素數,並且它被添加到列表中。在第一個「for循環」中,從21到100的所有素數應該被添加到_primeArr_中。 –