素數,是除了1和它本身之外不再被其他的除數整除。
使用程式求n以內素數個數問題,在各種語言的基礎教程中都會講到。
一般而言,求取素數可以使用粗暴的從2開始遍歷到自己,每次拿自己整除這些遍歷的數,若可以整除,則不是素數並跳出迴圈。若遍歷到自己都不能被整除,則是素數。
這種方法雖然簡單,但是效率十分低下。有興趣的可以測試一下程式,當n》=100000時,程式便會非常的慢了。
另外一種比較高效的方法是篩選法,它的具體思路是:
先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。
第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。
2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。
3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。
這樣一直做下去,就會把不超過n的全部合數都篩掉,留下的就是不超過n的全部質數。
這種做法的效率與上面粗暴方式相比,高了不止乙個數量級。
public static void main(string args)
public static int screenprimenumber(int number)
temp.set(1, 0);
for(int i = 2;i < math.sqrt(double.valueof(number));i++)}}
} int sum = 0;
for(int i = 0;i < temp.size();i++)
} return sum; }
public static int primenumber(int number)
}if(flag == true)
} return count;
}
篩選法求n以內素數(質數)
設定乙個標誌陣列isprime,isprime i 的值是1就表示i是素數。開始陣列元素值全部為1劃掉k的倍數,就是把isprime 2 k isprime 3 k 置成0最後檢查isprime陣列,輸出isprime i 為1的那些i include include using namespace...
使用篩選法求N以內的素數
1.使用篩選法求素數的思想是 使用乙個bool isprime n 來儲存乙個數是不是素數的標誌位。首先偶數不是素數 2除外 將2的倍數isprime全部設定為false。i從3開始遍歷,如果i為素數,則將i的倍數isprime全部設定成false。這樣就篩選掉了好多不是素數的數。從0遍歷ispri...
篩法 求n以內質數個數
判斷n是否為素數 續篩法部分 區間篩法 若乙個數可以進行因數分解,則得到的兩個數一定是有乙個 x sqrt x x 另乙個 x sqrt x x 任何乙個數都可以拆分為若干個質因數的乘積,如6 2 3,7 1 7 複雜度o nn sqrt n n include using namespace st...