使用biginteger查找幂和的序列

时间:2014-11-24 19:07:17

标签: java biginteger power-series

Sum(N) =1^1+2^2+3^3+...+N^N

使用Java, 我如何使用BigInteger找到最小的整数N,使得Sum(N)的值大于10 ^ 20? 我真的卡住了,请给我一些建议

这是我到目前为止所做的:

import java.math.BigInteger;
public class PROJECTV1 {
    public static void main(String [] args) {
        BigInteger bResult= bigFunctionExample_2();
        System.out.println(" => result_got:"+ bResult);
        System.out.println(); //newline
    }// end_main 

    public static BigInteger bigFunctionExample_2() {
        BigInteger bSum = BigInteger.ZERO;
        BigInteger bTmp;
        String sSum;
        // BigInteger bResult =0;
        for (int i=1; ; i++) {
            bTmp = BigInteger.valueOf(i);
            bTmp = bTmp.pow(i); // i^i
            bSum = bSum.add(bTmp); // sum = i^i+ (i-1)^(i-1)+ ....
            sSum = bSum.toString();
            if ( sSum.length() >21) {
                System.out.println("i="+i +" bSum ="+bSum);
                break;
            }//
        }//end_for
        return bSum; // result
    } // end_bigFunctionExample_2
}

2 个答案:

答案 0 :(得分:0)

这是计算一些因子的线索:

import java.math.*;

public class FactorialBig {
    public static BigInteger factorial(BigInteger n) {
        if (n.equals(BigInteger.ZERO))
            return BigInteger.ONE;
        else
            return n.multiply(factorial(n.subtract(BigInteger.ONE)));
    }
    public static void main(String[] args) {
        for (int n = 0; n < 20; n++) {
            BigInteger f = factorial(new BigInteger(new Integer(n).toString()));
            System.out.printf("factorial(%2d) = %20s%n", n, f.toString());
        }
    }
}

您知道应将上述内容保存为名为“FacotrialBig.java”的文件。

答案 1 :(得分:0)

查看代码,您有一行bTmp.pow(2)。这会使系列中的数字平方,但您需要将bTmp提升为bTmp幂。 Java似乎不想将BigInteger作为pow的参数,但您可以将pow替换为另一个for循环。

此外,sSum.length() >30看起来只有在您的总和大于或等于10 29 时才会出现。是否有理由每次通过循环将数字转换为字符串,而不是将数字与10 20 进行比较?也许您可以在bSum > bMax循环中添加for之类的测试条件,而不是将其留空并使用break退出。然后你可以在你的代码开头创建一个新的BigInteger bMax并将其设置为10 20

对于测试,您可以将bMax设置为小的,例如100,并查看您的程序是否给出了正确的结果。您可以手动计算系列的前几个步骤来检查您的程序。