開啟章節選單
10190 Divide, But Not Quite Conquer!
題目連結
題目敘述
你的目標是在這題中,將一個整數 n 持續除以另一個整數 m,直到 n = 1,並得到一個數列。
我們把這個數列的每個數稱作 a[i],並假設這個數列總共有 k 個數(也就是說你必須進行 k - 1 次連續的除法才能讓 n 變成 1)。
你只有在滿足以下條件的情況下,才能建立這個數列:
- a[1] = n,a[i] = a[i - 1] ÷ m,對於所有 1 ≤ i < k。
- a[i] 可以被 m 整除(也就是 a[i] mod m = 0)對於所有 1 ≤ i < k。
- a[1] > a[2] > a[3] > ... > a[k]。
輸入格式
輸入將包含任意多行。
每一行包含兩個非負整數 n 和 m,它們的數值都小於 2,000,000,000。
你必須讀取直到檔案結束(EOF)為止。
輸出格式
對於每一組 n 和 m,你必須輸出對應的數列 a(如前面所定義)在同一行上,數列中的相鄰數字之間以一個空格分隔。
如果該數列因違反某項限制而不存在,請輸出字串 'Boring!'(不含引號),並且只輸出這一行。
解題思路
先檢查兩數是否為1或0,再用while迴圈確認是否能整除至1。
程式碼
#include <bits/stdc++.h> using namespace std; #define ll long long int int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); vector<ll> ans; ll n,m,boring; while(cin>>n>>m){ ans.clear(); boring=0; if(n==0 || m==0 || n==1 || m==1){ boring=1; } else{ while(n>1){ if(n%m!=0){ boring=1; break; } else{ ans.push_back(n); n=n/m; } } } if(boring==1){ cout<<"Boring!"<<'\n'; } else{ ans.push_back(1); for(auto i:ans){ if(i==1){ cout<<i<<'\n'; } else{ cout<<i<<' '; } } } } }