int[] seq = new int[num/2];
int seqIndex = 0;
int prime = highestPrimes[num+1];
int solves = 0;
for(;;) {
num -= prime;
seq[seqIndex++] = prime;
if(num == 0) {
++solves;
seqs.add(seq);
}
if(num <= 0) {
prime = -1;
}
while(prime < 0 && seqIndex > 0) {
prime = seq[--seqIndex];
num += prime;
prime = highestPrimes[prime];
}
if(prime < 0 && seqIndex <= 0) {
break;
}
}
/*
Output:
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
12: 2 2 2 2 2 2
*/