題目連結:
題目意譯:
你被給定一個正整數 n,其一開始放置於一個版面上。對於接下來的 10 ^ 9 天,每一天你都將執行以下程序:
對於每一個存在於版面上的數字 xx,找到所有數字 i,其位於 1 ≦ i ≦ n 中且滿足 x % i == 1。
接著,將這些數字放到版面上。
回傳經過 10 ^ 9 天候存在於版面上的相異整數之數量。
注:
一旦一個數字放置到版面上,它將會一直存在。
「%」代表著模運算。例如說,14 % 3 是 2。
限制:
1 ≦ n ≦ 100
範例測資:
範例 1:
輸入: n = 5
輸出: 4
解釋: 一開始,5 存在於版面上。
下一天,2 和 4 將會被加進去,因為 5 % 2 == 1 而 5 & 4 == 1。
再下一天,3將會被加到版面中,因為 4 % 3 == 1。
在十億天後,版面上的相異整數為 2 、 3 、 4 和 5。
範例 2:
輸入: n = 3
輸出: 2
解釋:
由於 3 % 2 == 1,2 將會被加到版面上。
在十億天後,版面上的唯二相異整數為 2 和 3。
解題思維:
可以看到無論 n 值為何(除了 n == 1 以外),第一天後 n - 1 必定會被加到版面上(因為 n % n - 1 == 1)。
同理,第二天後 n - 2 會被加到版面上。以此類推。
可以看到在 n - 1 天後,數字 2 、 3 、 …… 、 n - 1 、 n 都會在版面上。而總數為 n - 1 個。
而題目提及必定會經過 10 ^ 9 天,而 n 最大也才 100,因此 2 ~ n 必定會在版面上。
因此只要 n > 1,答案為 n - 1;若 n == 1,則答案為 1。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。