|
亲!马上注册或者登录会查看更多内容!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先找到要求值的上界,然后用二分法
- public static long findM(long n) {
- int i = 0;
- // First, find upper bound
- while(trailingZeros((long) Math.pow(2, i)) < n) {
- i++;
- }
- long left = 0, right = (long) Math.pow(2, i);
- // binary search find smallest valid one
- while(left <= right) {
- long mid = left + (right-left)/2;
- long zeros = trailingZeros(mid);
- if(zeros >= n) {
- right = mid - 1;
- } else {
- left = mid + 1;
- }
- }
- return left;
- }
- private static long trailingZeros(long n) {
- long cnt = 0, base = 5;
- while(n/base != 0) {
- cnt += n / base;
- base *= 5;
- }
- return cnt;
- }
复制代码
|
|