English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

1000 ~ 10000 的每個偶數 用兩個質數的組合 (多組)
要怎麼設計出那種程式 ?

例 : 30= 23+17 ; 19+11 : 17+13 而不重複

2006-07-24 11:04:39 · 2 個解答 · 發問者 pei 1 in 電腦與網際網路 程式設計

2 個解答

程式的做法:
首先!要先把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

fedest.com, questions and answers