I too tried this, in Java, here are my results:
for 19 123456
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 8256 16448 32896 41152 82304 123456
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 8256 16448 32896 41152 82304
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 8256 16448 32896 41152
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 8256 16448 32896
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 8256 16448
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 8256
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192
array = 1 2 4 8 16 32 64 128 256 512 1024 2048 4096
array = 1 2 4 8 16 32 64 128 256 512 1024 2048
array = 1 2 4 8 16 32 64 128 256 512 1024
array = 1 2 4 8 16 32 64 128 256 512
array = 1 2 4 8 16 32 64 128 256
array = 1 2 4 8 16 32 64 128
array = 1 2 4 8 16 32 64
array = 1 2 4 8 16 32
array = 1 2 4 8 16
array = 1 2 4 8
array = 1 2 4
array = 1 2
Execution Time: 45ms
For 10 127
array = 1 2 4 8 16 32 40 42 84 126 127
array = 1 2 4 8 16 32 40 42 84 126
array = 1 2 4 8 16 32 40 42 84
array = 1 2 4 8 16 32 40 42
array = 1 2 4 8 16 32 40
array = 1 2 4 8 16 32
array = 1 2 4 8 16
array = 1 2 4 8
array = 1 2 4
array = 1 2
Execution Time: 8ms
For 13 743
array = 1 2 4 8 16 32 64 128 160 162 290 580 742 743
array = 1 2 4 8 16 32 64 128 160 162 290 580 742
array = 1 2 4 8 16 32 64 128 160 162 290 580
array = 1 2 4 8 16 32 64 128 160 162 290
array = 1 2 4 8 16 32 64 128 160 162
array = 1 2 4 8 16 32 64 128 160
array = 1 2 4 8 16 32 64 128
array = 1 2 4 8 16 32 64
array = 1 2 4 8 16 32
array = 1 2 4 8 16
array = 1 2 4 8
array = 1 2 4
array = 1 2
Execution Time: 14ms
I'm still running it for 25 1234567, will update once I get that output.
Here is my code:
public class AddChain {
private static int maxIter = 25;
private static int maxSum = 1234567;
private static int [] arr;
private static boolean genAddChain(int iter, int currMax) {
if (iter >= (maxIter+1)) {
return false;
}
arr[iter-1] = currMax;
for (int i = iter-1; i>= 0; i--) {
arr[iter] = currMax + arr[i];
if (arr[iter]==maxSum) {
printArray(arr,iter+1);
return true;
}
if (genAddChain(iter+1,arr[iter])) {
printArray(arr,iter+1);
return true;
}
}
for (int i = iter-1; i>= 0; i--) {
arr[iter] = 0;
}
return false;
}
private static void printArray(int [] arr, int max) {
StringBuffer buff = new StringBuffer();
buff.append("array = ");
for (int i = 0; i < max; i++) {
buff.append(arr[i] + " ");
}
System.out.println(buff.toString());
}
public static void main(String[] args) {
arr = new int[maxIter+1];
for (int i = 0; i < arr.length; i++) {
arr[i]=0;
}
long startTime = System.nanoTime();
genAddChain(1,1);
long endTime = System.nanoTime();
long duration = (endTime - startTime);
System.out.println("Execution Time: " + duration/1000000 + "ms");
}
}