Я написал некоторый код для создания списка простых факторизаций каждого числа. Код работает, как и ожидалось, для создания списков из 1 000 000 или менее элементов, но не хватает памяти, когда я пытаюсь создать более крупные списки. Мне удалось создать список из 1000000 элементов с ограничением памяти по умолчанию, равным 256 МБ, для Обработки за 100 секунд. При увеличении лимита памяти до 1024 МБ код выполняется в течение 45 минут, а затем не хватает памяти при попытке создать список из 2 000 000 элементов. Я считаю, что проблема связана с управлением памятью.
Вот код.
int listLength=1000;
boolean failed=false;
void setup() {
int time=millis(); //keep track of how long it takes to do things
//get prime data
String[] primesString=loadStrings("primes.txt");
int[] primes=new int[primesString.length];
for(int i=0; i<primes.length; i++) {
primes[i]=int(primesString[i]);
}
println("loaded primes in "+((float(millis())-time)/1000)+" seconds");
//do prime factorizations
String[] list=new String[listLength];
for(int i=0; i<listLength; i++) {
int boi=i+1;
list[i]=boi+"=";
int primeIndex=0;
while(boi!=1) {
if(primeIndex==primes.length) { println("ERROR: not enough primes indexed"); boi=1; i=listLength; failed=true; }
else {
if(boi%primes[primeIndex]==0) {
int count=1; boi/=primes[primeIndex];
while(boi%primes[primeIndex]==0) {
boi/=primes[primeIndex];
count++;
}
list[i]+="p"+primeIndex+"^"+count+"*"; //list[i]+=primes[primeIndex]+"^"+count+"*";
}
primeIndex++;
}
}
list[i]=list[i].substring(0, list[i].length()-1);
}
println("prime factored in "+((float(millis())-time)/1000)+" seconds");
//save data
if(!failed) {
saveStrings(listLength+" prime factored.txt", list);
}
println("saved data in "+((float(millis())-time)/1000)+" seconds");
//close program
exit();
}