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。 範例
分析: 此程式最大須計算 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。 |