堆大小边界

时间:2013-07-04 11:39:31

标签: heap

我现在用几个月的Java来解决euler的问题。很多时候,堆大小限制了我,所以我想知道其他人在达到这个死亡和令人讨厌的结束时会做些什么。

一个很好的例子是问题“http://projecteuler.net/problem=432”,我有一个简洁的函数,可以解决10 ^ 6几毫秒,但我不能将它应用于请求的值(10 ^ 11),因为它需要一个大小为10 ^ 11的整数数组。

编辑:澄清问题。有没有办法筛选大数字?例如,如果你必须找到大于10 ^ 10的第一个素数,你会怎么样?

2 个答案:

答案 0 :(得分:0)

如果您的解决方案需要10 ** 11个整数数组,那么您需要购买一台至少有745GB内存的计算机。默认堆大小不是那么大似乎是合理的。或者你需要重新考虑它而不是使用这么大的数组。

答案 1 :(得分:0)

对于真正大的素数,你无法从eratosthenes的筛子中获得,因为筛子阵列的最大长度受Integer.MAX_VALUE的限制。

您可以通过最简单的方法计算它们 -

prime(N)=如果[0,sqrt(N)]中的每个素数都不是N的素因子。

并将您计算的所有大素数存储在一个文件或多个文件中。做一次,然后重复使用它们。当您处理需要大质数的欧拉问题时,首先将这些素数从文件加载到内存。