題目給的「註」是滿有幫助的提示,限縮要測試的數字範圍
u[10000] < 10^18
這題我是用建表法,C++ 可以 2ms 過,至於要建多大,煩請客官們自己試試看
從頭跑到 10^18 太花時間,不推薦
for (n = 1; n < 10^18; n++) { // test if n is an ugly number }
不如就定義,直接取 2 或 3 或 5 的倍數
for (n2 = 1; n2 < 10^18; n2 *= 2) { for (n3 = 1; n2*n3 < 10^18; n3 *= 3) { for (n5 = 1; n2*n3*n5 < 10^18; n5 *= 5) { // n2*n3*n5 must be an ugly number } } }
建完表,就輸入的 n
查表即可 AC