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 */