public static Set> powerset(Set givenSet) { LinkedList givenSetList = new LinkedList(givenSet); Set> powerSet = new LinkedHashSet>(); int subsetCount = (int)Math.pow(2,givenSet.size()); for (int i = 0; i < subsetCount; i++ ) { Set subSet = new LinkedHashSet(); //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; }