先來想想甚麼是質數,就是除了1和自己之外,其他所有的數字都不能整除他。
部分程式碼如下(以c語言呈現):
int j = 2;
if (i == 1) //這裡是小陷阱,如果沒有這一小段,那凡是起點從1開始的,最終的值數總和都會多1
isprime = false;
while(j * j <= i) //從j==2開始測試 i 值是否能被整除,若能被整除,則此 i 值並非一個質數
{
if (i % j == 0)
{
isprime = false;
break;
}
j++;
}
但這樣的寫法有一個缺點,就是時間複雜度至少會是n^2(當然,尤其遇到無限輸入值的題目時,時間複雜度會更大)
而利用建表法,雖然會浪費許多空間,但卻能在最多n^2的時間內處理掉這題