账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    求这段大数阶乘算法的时间复杂度和空间复杂度
    26
    0

    利用bigInteger实现了一下大数阶乘的算法,实测比直接迭代相乘快一个数量级,但是不知道怎么求时间和空间复杂,想大家帮忙看下。

    private static String factorial(int n) {
            java.math.BigInteger ans = java.math.BigInteger.valueOf(1);
            int bits = 0;
            for (int i = 2; i <= n; i++) {
                if (Integer.bitCount(i) == 1) {
                    bits += Integer.numberOfTrailingZeros(i);
                    continue;
                }
    //            ans = ans.multiply(java.math.BigInteger.valueOf(i));
            }
            ans = subFactorial(1, n);
    
            return ans.shiftLeft(bits).toString();
        }
    
        private static java.math.BigInteger subFactorial(long a, long b) {
            if ((b - a) < 10) {
                java.math.BigInteger res = java.math.BigInteger.ONE;
                for (long i = a; i <= b; i++) {
                    if (Long.bitCount(i) == 1) {
                        continue;
                    }
                    res = res.multiply(java.math.BigInteger.valueOf(i));
                }
                return res;
            } else {
                long mid = a + b >>> 1;
                return subFactorial(a, mid).multiply(subFactorial(mid + 1, b));
            }
        }
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 人间人 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部