1000 ~ 10000 的每個偶數 用兩個質數的組合 (多組)
要怎麼設計出那種程式 ?
例 : 30= 23+17 ; 19+11 : 17+13 而不重複
2006-07-24 11:04:39 · 2 個解答 · 發問者 pei 1 in 電腦與網際網路 ➔ 程式設計
程式的做法:
首先!要先把n數中的質數一一找出~找到 n 的一半就不會有重複!
然後找質數, 找到一個質數,就做 n -質數,然後看 n-質數 是否也是質數!
做到 n / 2 就可以了!
譬如:
n=30 30的質數是有 3 5 7 11 13 17 19 23 29
當質數是 3 時,n-3=27 ,27不是質數…所以不可以
當質數是 11 時,n-11=19,是質數…所以可以
就這樣!程式如下! 一個 Command1 跟 Text1
我是用 Print 所以可能會印超過視窗,妳可以自已改成用List1,
把 Print i & "+" & s - i 這一行改成 List1.AddItem i & "+" & s-i 就可以了!!
Private Sub Command1_Click()
Dim i As Long, s As Long 's 用來放 n 這個數
s = Text1.Text
For i = 3 To s \ 2 Step 2 '從3開始到 s / 2 止,Step 2 是為了減少時間…
If T(i) And T(s - i) Then Print i & "+" & s - i '呼叫自定函數 T 判斷是否為質數
Next
End Sub
Function T(x As Long) As Boolean '用來判斷是否為函數,傳迴質為 True/False
Dim i As Long
i = 1
Do
i = i + 1
Loop Until x Mod i = 0 '如果 x 除以 i 為 0 跳出迴圈
T = x = i '如果 x= i 為True ,就把True放到 T傳回去,反之,False傳回
End Function
程式中!do .... loop until x mod i =0 這段程式的用法是…
讓 i 從 2 開始找…直到可以除盡為止
如果除到最後…只有自已可以除以自已… 就是x=i 如:7 的質數只有 1 跟7
反之 ,如: 8 有 2 4 8 所以…到 2 就會跳出迴圈,x 就不會等於 i
程式很短…反而解說比較多… = =
如果還有問題的話!在問!!
2006-07-24 15:45:18 · answer #1 · answered by 無聊~經過! 2 · 0⤊ 0⤋
'程式執行起來的時間還挺久的XDPrivate Sub Command1_Click() Dim I As Integer, J As Integer, X As Integer, Y As Integer Dim A() As Integer, F As Integer, K As Integer Open "C:\Prime.txt" For Output As #1 K = 2 For I = 1000 To 10000 Step 2 '逢百才做1次Doeventsx及更新Caption以減少程式執行的時間 If I Mod 100 = 0 Then Caption = "正計算到 " & I DoEvents End If For J = K To I If IsPrime(J) Then ReDim Preserve A(F) A(F) = J: F = F + 1 End If Next K = I + 1 For X = 0 To UBound(A) - 1 For Y = X To UBound(A) If A(X) + A(Y) = I Then Print #1, I & "=" & A(X) & "+" & A(Y) Next Next Next Close #1 MsgBox "已經將結果儲存於 C:\Prime.txt !!"End SubFunction IsPrime(N As Integer) As Boolean '判斷質數副函數 Dim I As Long If N = 2 Then IsPrime = True: Exit Function If N Mod 2 = 0 Then Exit Function For I = 2 To Int(Sqr(N)) If N Mod I = 0 Then Exit Function Next I IsPrime = TrueEnd Function
2006-07-25 00:30:15 補充:
火力加強版,速度快多了(免費空間只能放7天)http://www.yousendit.com/transfer.php?action=check_download&ufid=25AFC5960C2DC144&key=00181716a0436b72063a7491cceafef9d8c02de9
2006-07-24 15:58:32 · answer #2 · answered by W.J.S. 7 · 0⤊ 0⤋