代码优化 - BigInteger

时间:2016-10-27 13:16:59

标签: java optimization biginteger

代码正常工作,直到我给它一个很大的值 - 它需要花费太多时间来执行。

你能给我一些如何优化它的建议吗?

BigInteger类型的n参数是必须的,它是任务的一部分;)

public static String oddity(BigInteger n) {

    List<BigInteger> list = new ArrayList<BigInteger>();
    String result = null;
    for (BigInteger bi = BigInteger.valueOf(1);
         bi.compareTo(n) <= 0;
         bi = bi.add(BigInteger.ONE)) {
        if (n.mod(bi).equals(BigInteger.ZERO))
            list.add(bi);
    }

    if (list.size() % 2 == 0)
        result = "even";
    else result = "odd";


    return result;
}

如果“n”个除数的数量为奇数,则返回“奇数”。否则返回'偶数'。

2 个答案:

答案 0 :(得分:0)

由于您不使用list除了获得最终大小,您可以使用整数作为计数器,即:n++而不是list.add(bi)。 这将节省大量内存。因此节省了用于管理其分配的时间。

答案 1 :(得分:0)

思考而不仅仅是编程会有很大帮助。你不需要找到所有的除数。你甚至不需要数数。您所需要的只是查明计数是否为奇数。

但是除数总是成对出现:对于每个除数in/i也是除数。

所以计数总是均匀的,除非有一个除数i等于n/i。使用番石榴sqrt ...