#21726: 非建表,用最純粹直觀的方式來判斷


roger.sly.sky@gmail.com (Jones Epoch)


先來想想甚麼是質數,就是除了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的時間內處理掉這題