103 第三題 判斷 n2 + n + 41 是否質數

       表單上建立一個 LABEL、二個 TEXTBOX 及一個按鈕。LABEL 表示「請輸入數字」,
相對應的第一個 TEXTBOX 可以輸入整數 n (0 ≤ n ≤ 10000),
請依公式 y = n2 + n + 41 計算數值 y ,而後在第二個 TEXTBOX, 輸出數值 y 是否為質數。
程式執行順序:輸入一個整數,按下按鈕,輸出 “質數” 或 “非質數”。

輸入說明

輸入整數值 n。(0 ≤ n ≤ 10000)

輸出說明

若 y 為質數,輸出 y,否則輸出 n。

範例
輸入 輸出
1614 y
9959 y
10000 n


分析:
此程式最大須計算 100002 + 10000 + 41 約 108
如果是以下列的方式找質數,相信你的處理時間會被其他高手打趴。
TextBox2.Text = "質數"
For i = 2 To y-1
    If y mod i=0 Then
        TextBox2.Text = "非質數"
        Exit Sub
    EndIf
Next

分析一下 y = n2 + n + 41,可得 y 恆為奇數,證明如下:
當 n 為奇數,則 n2 + n + 41 = 奇數 + 奇數 + 奇數 結果為 奇數。
當 n 為偶數,則 n2 + n + 41 = 偶數 + 偶數 + 奇數 結果為 奇數。
因此無論 n 為何數, y 恆為奇數。
由此結論,y 非偶數,又何必 y mod 2 呢?
另外,測試的數字應從 3 至 y 開根號,每次遞增 2 即可,如此將大大提升程式效率。

假設某數 x=24,則因數分解為 1,2,3,4,6,8,12,24 ,注意到沒? 因數是成對出現的,1 與 24、2 與 12、3 與 8、4 與 6,因此只要從 2 找到 4,不就可以了嗎? 何必找到 23?
而 24 開根號約 4.多不到 5。
再舉一例:假設某數 x=143,則因數分解為 1,11,13,143,是不是找到 11 即可?
而 143 開根號為 11.多,不到 12。