2011年11月7日 星期一

98模擬 Problem 2 (數字分解


給一個偶數n,請你將n 分解成兩個質數的和,也就是說,這兩個質數相加的和必須等於n。

輸入說明:
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料,每筆測試資料為一個數字,數字的範圍為[4, 10000]間的偶數。

輸出說明:
對輸入的每筆測試資料,分別輸出 2 個質數,用一個空白做為區隔,請由小到大排列。

輸入範例:
2
12
100

輸出範例:
5 7
3 97

5 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    For i = 1 To n
    Input #1, x

    For j = 2 To (x - 1) / 2
    If Check(j) = Check(x - j) And Check(j) = False Then Print #2, j & " " & x - j: Exit For
    Next j

    Next i
    Close #2
    Close #1
    End
    End Sub

    Function Check(A)
    P = False
    For i = 2 To A - 1
    If A Mod i = 0 Then P = True: Exit For
    Next i
    Check = P
    End Function

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, t
    For i = 1 To t
    Input #1, n
    Call A1(n, n)
    Next
    Close
    Close
    End
    End Sub

    Sub A1(a, b)
    Dim ch As Boolean
    For i = 2 To b
    ch = True
    For j = 2 To i - 1
    If i Mod j = 0 Then ch = False
    Next
    If ch = True Then If A2(a, i) = 1 Then Exit Sub
    Next
    End Sub

    Function A2(a, b)
    Dim ch As Boolean
    ch = True
    For i = 2 To (a - b) - 1
    If (a - b) Mod i = 0 Then ch = False
    Next
    If ch = True Then Print #2, b; i: A2 = 1
    End Function

    回覆刪除
  3. 柯佑好,
    你的程式正確。
    在判斷是否為質數的地方,函數傳回值,以真為質數,假為否,那麼在If Check(j) = Check(x - j) And Check(j) = False Then
    這行就可以改成 if check(j) and check(x-j) then

    arro好,
    程式正確。
    程式雖然利用了二層呼叫,卻沒有讓程式變快,可惜了。
    而且,1是不是質數呢? 如果是,你的程式中,不包含1。
    還好,找了找網路,1不是質數。
    但是,這樣的小地方要注意哦。

    回覆刪除
  4. 熊掌好,

    if check(j) and check(x-j) then
    未設定時是=true吧~

    回覆刪除
  5. 1好像叫做"合數"的樣子

    回覆刪除