時間限制:3000 ms | 記憶體限制:65535 kb
難度:1
描述輸入乙個自然數k(k>1),如果存在自然數m和n(m>n),使得k^m和k^n均大於等於1000,且他們的末尾三位數相等,則稱m和n是一對「k尾相等數」。下面請程式設計求出m+n最小的k尾相等數。
輸入第一行包含乙個正整數t,t<10000,表示有t組資料;
隨後有n行,每行包括乙個整數k(k<2*10^10);
輸出對於輸入的每個整數k,輸出對應的m+n的最小值;
樣例輸入12
樣例輸出
這是一道很有意思的題。雖然難度是1.但是通過尋找好的答案,也學到了很多,特地在此總結下。
一開始我的思路:首先1、用biginteger肯定是正解,2、對1000取餘,然後用個陣列儲存下來3、迴圈遍歷是否相同
沒做出來後:分析問題:首先是超時嚴重。因為輸入乙個大數後,乘法運算要好久。
其次、如何判斷m和n是最小,一開始考慮的迴圈遍歷肯定不行了。
正確思路:發現一些小的東西。我只要對後3未數進行乘法運算就好。例如2 當2大於1000時勢1024 取024也就是24 然後24*2=48 ;48取餘1000是48;48再乘2
依次,這樣就解決了資料過大導致超時問題。
如何判斷m和n相加最小?
我看了網上的答案,發現用乙個1000範圍的int型別陣列。因為對1000取餘後,他餘數的範圍是0~999.所以看**就ok
static biginteger aa;
public static void main(string args)else
} }public static int recursion(biginteger big)
} aa=big;
return test;
}
K尾相等數
problem 105 k尾相等數 time limit 3 ms memory limit 64 mb difficulty 1 description 輸入乙個自然數k k 1 如果存在自然數m和n m n 使得k m和k n均大於等於1000,且他們的末尾三位數相等,則稱m和n是一對 k尾相等...
K尾相等數問題
描述乙個自然數k 2 k 若存在自然數m和n m大於n 使得k m和k n均大於或等於1000,且它們的末尾三位數相等,則稱m和n是一對 k尾相等數 輸入 輸入包含若干個測試用例,每個測試用例佔一行,為乙個自然數k。輸出 對每個測試用例,用一行輸出符合要求的最小m n值。樣例輸入2 樣例輸出 120...
K尾相等數問題
k尾相等數問題 描述乙個自然數k 2 k 若存在自然數m和 n m大於 n 使得 k m和 k n均大於或等於 1000 且它們的末尾三位數相等,則稱m和 n是一對 k尾相等數 輸入輸入包含若干個測試用例,每個測試用例佔一行,為乙個自然數k。輸出對每個測試用例,用一行輸出符合要求的最小m n值。樣例...