# e566 - Divide, But Not Quite Conquer! ### 題目連結: [e566](https://zerojudge.tw/ShowProblem?problemid=e566) ### 題目解析 * 將整數 n 除以另一個整數 m,直到 n=1 為止 * 每一次除完的結果都會得到一個數字,因此除到最後會得到一個數列 * 題目對於這樣一個數列有特殊限制: * a 為此數列的名稱,元素一共有 a[1], a[2], ... a[k] * 所有 a 數列中的數字都會被 m 整除 * a[1] > a[2] > a[3] > ... > a[k] ### 題目類型 流程控制/數值範圍/代數計算 ### 範例測資解讀 * 輸入 * 每組測資可能有多行,每一行為兩個數字,分別代表 n, m * 輸出 * 會有兩種類型 * 整除後的數列 * Boring! 文字 ### 其他注意事項 * 輸入說明有提到 n, m 皆小於 `2000000000` 是一個很大的數字 ### 程式解析 如果只看題目的描述,都是以代數的方式列出規則,則較難理解 建議直接看舉例的部分,以實際的數字進行計算,比較容易理解 例如: * n=125, m=5 則會形成數列 125, 25, 5, 1 * n=30, m=3 則會形成數列 30, 10, 3, 1 若以題目的限制決定是何種數列,則可以發現 125, 25, 5, 1 為此題目需要的數列 30, 10, 3, 1 則為 boring 由上述說明可以發現,如果要滿足限制條件的數列,此種數列應為"等比數列" 每做完一次除法後,將整除後的結果存入串列中,等待判斷 ### 完整程式碼 (僅提供參考) ``` python=01 while True: try: #start n, m = map(int, input().split()) ans = [] boring = False if n==0 or m==0: boring = True else: ans.append(n) while n >1: if n%m == 0: n //= m ans.append(n) else: boring = True break if boring == True: print("Boring!") else: for i in ans: print(i, end=' ') print() except: break ``` ###### tags: `基礎15題解` `APCS` `ZeroJudge`