我試圖解決一個問題「鑑於偶數(大於2)返回兩個素數,其總和等於給定的數字。「並獲得上述錯誤。 錯誤是由於代碼複雜性很明顯。 請提出的方法來降低複雜性如何降低這種代碼的複雜性,因爲我得到錯誤:異常線程「main」 java.lang.OutOfMemoryError:Java堆空間
我的代碼是:
public ArrayList<Integer> primesum(int A) {
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int i=0;i<=A;i++)
{
//All the numbers are prime
arr.add(1);
}
arr.set(0,0);//
arr.set(1,0);
for(int i=2; i<=Math.sqrt(A);i++)
{
if(arr.get(i)==1)
for(int j=2;i*j<=A;j++)
{
arr.set(i*j,0);
}
}
for(int i=0;i<=Math.sqrt(A);i++)
{
if(arr.get(i)==1)
{
boolean b = checkprime((A-i));
if(b)
{
arr.clear();
arr.add(i);
arr.add(A-i);
break;
}
}
}
return arr;
}
private static boolean checkprime(int p)
{
boolean k =true;
if(p==1)
return false;
for(int i=2;i<=Math.sqrt(p);i++)
{
if(p%i==0)
k=false;
}
return k;
}
您將太多東西添加到列表中...因此出現「內存不足」錯誤。 – Jashaszun
到Java添加更多的內存用'-Xmx'命令行參數的 – Andreas
可能重複[什麼是一個OutOfMemoryError,如何調試和修復它(http://stackoverflow.com/questions/24510188/what-is -out-outofmemoryerror-and-how-do-i-debug-and-fix-it) – Raedwald