代码正常工作,直到我给它一个很大的值 - 它需要花费太多时间来执行。
你能给我一些如何优化它的建议吗?
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”个除数的数量为奇数,则返回“奇数”。否则返回'偶数'。
答案 0 :(得分:0)
由于您不使用list
除了获得最终大小,您可以使用整数作为计数器,即:n++
而不是list.add(bi)
。
这将节省大量内存。因此节省了用于管理其分配的时间。
答案 1 :(得分:0)
思考而不仅仅是编程会有很大帮助。你不需要找到所有的除数。你甚至不需要数数。您所需要的只是查明计数是否为奇数。
但是除数总是成对出现:对于每个除数i
,n/i
也是除数。
所以计数总是均匀的,除非有一个除数i
等于n/i
。使用番石榴sqrt ...