Обратите внимание, что
num * (0.9)^k <= limit
- это неравенство, которое вы хотите удовлетворить для некоторого целого числа k
, и вы ищете наименьшее из таких k
.Затем
(0.9)^k <= limit / num
и
k * log(0.9) <= log(limit / num)
, так что
k >= log(limit / num) / log(0.9)
, где неравенство обращается, потому что log(0.9) < 0
.Таким образом, возьмите наименьшее целое число k
больше log(limit / num) / log(0.9)
.
Итак, возьмите потолок log(limit / num) / log(0.9)
.
Конечно, это обобщается заменой 0.9
на r
где r
- ваш множитель от (0, 1)
.