2010年3月23日 星期二

求餘數

求餘數對於會寫程式的人來說,是個簡單的問題,例如用VB 來求餘數時,可以用mod這個關鍵字來實作。但如果算式為R = B^P mod M 的型態,給B、P、及M,要算出餘數R,當B 或P 很大時,那就變得不簡單了。現在,請你設計一個程式,來解決上述這個不簡單的問題。

輸入說明:

第一行的數字,表示有幾個問題要求解,第二行開始的每一行,為一個獨立的問題。每一行包含三個數字,分別為B、P、及M,例如:10 2009 9 代表B=10、P=2009、M=9。所有數字均為正整數,其範圍屬於[1,100000]。

輸出說明:

對輸入的每個問題分別以一行輸出餘數R。

輸入範例:

2

10 2009 9

2 99 5

輸出範例:
1
3

8 則留言:

  1. Private Sub Form_Load()
    Open App.Path & "/in.txt" For Input As #1
    Open App.Path & "/out.txt" For Output As #2
    Input #1, N
    Do While Not EOF(1)
    Input #1, B, P, M
    ans = B
    For i = 1 To P - 1
    ans = ans * B
    ans = ans Mod M
    Next i
    Print #2, ans
    Loop
    Close #2
    Close #1
    End Sub

    回覆刪除
  2. 高仔好,
    這樣的題目,也是考數學而已,對咱們學校的選手來說,是佔便宜的。
    所以呢,數學還是要加加油哦。

    回覆刪除
  3. Private Sub Form_Load()
    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, b, p, m
    k = 1
    For j = 1 To p
    k = k * b
    k = k Mod m
    Next j
    Print #2, k
    Next i
    Close #1
    Close #2
    End Sub

    回覆刪除
  4. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, x

    For i = 1 To x
    ans = 1
    Input #1, q, w, e
    For j = 1 To w
    ans = ans * q
    ans = ans Mod e
    Next j
    Print #2, ans
    Next i
    Close #1
    Close #2
    End Sub

    回覆刪除
  5. Y揚好,
    也是OK的。
    題外話,
    如果是想讓你說清楚,以數學的方式,將這題說明,為什麼這樣的結果會是對的,你要怎麼說呢?
    (也就是說,為什麼,人家本來是先要算出那個數之後來除,才能得到餘數,
    而你(們)把它給拆開了,答案也一樣呢? )

    回覆刪除
  6. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, qq
    For i = 1 To qq
    Input #1, B, P, M
    U = B
    For j = 1 To P - 1
    U = U * B
    U = U Mod M
    Next j
    Print #2, U
    Next i
    Close #2
    Close #1
    End Sub

    回覆刪除
  7. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Input #1, N

    For i = 1 To N
    Input #1, b, p, m

    a = b
    For j = 1 To p - 1

    a = a * b
    a = a Mod m

    Next j

    Print a
    Next i
    Close
    End Sub
    ---
    因為覺得怪怪的所以就用手寫算了一次..過程雖然怪怪的可是最後答案一致
    另外,文件檔裡多餘的空白行似乎會影響到程式運算...

    回覆刪除