protected static void bitReverse(int[] A, int logN) {
int[] temp = new int[A.length];
for (int i=0; i<A.length; i++)
temp[reverse[i]] = A[i];
for (int i=0; i<A.length; i++)
A[i] = temp[i];
}
protected static int[] reverseArray(int n, int logN) {
int[] result = new int[n];
for (int i=0; i<n; i++)
result[i] = reverse(i,logN);
return result;
}
protected static int reverse(int N, int logN) {
int bit=0;
int result=0;
for (int i=0; i<logN; i++) {
bit = N & 1;
result = (result << 1) + bit;
N = N >>> 1;
}
return result;
}