rendered paste body public static <E> Set<Set<E>> powerset(Set<E> givenSet) { LinkedList<E> givenSetList = new LinkedList<E>(givenSet); Set<Set<E>> powerSet = new LinkedHashSet<Set<E>>(); int subsetCount = (int)Math.pow(2,givenSet.size()); for (int i = 0; i < subsetCount; i++ ) { Set<E> subSet = new LinkedHashSet<E>(); //System.out.println("i="+i+" ("+Integer.toBinaryString(i)+")"); for (E e: givenSetList) { int index = givenSetList.indexOf(e); int temp = i / (int)Math.pow(2,index); //System.out.println("temp="+temp); /* int temp = (i & (int)Math.pow(2,givenSetList.indexOf(e)) ) % (int)Math.pow(2,givenSetList.indexOf(e)); " 2^"+ givenSetList.indexOf(e)+ "="+ (int)Math.pow(2,givenSetList.indexOf(e))); */ if ( temp % 2 == 1) { subSet.add(e); } } //System.out.println("one subset is "+subSet); powerSet.add(subSet); } return powerSet; }