1 package JSci.maths.groups; 2 3 10 public final class CyclicGroup extends FiniteGroup implements AbelianGroup { 11 14 private final Member ZERO; 15 19 public CyclicGroup(int n) { 20 super(n); 21 ZERO = new Member(0); 22 } 23 26 public boolean equals(Object o) { 27 return (o instanceof CyclicGroup) && (((CyclicGroup)o).order == order); 28 } 29 public int hashCode() { 30 return order; 31 } 32 public String toString() { 33 return "Z_"+order; 34 } 35 39 public Member getElement(int i) { 40 return new Member(i); 41 } 42 45 public Group.Member[] getElements() { 46 Group.Member elements[] = new Group.Member[order]; 47 for(int i=0; i<order; i++) 48 elements[i] = getElement(i); 49 return elements; 50 } 51 54 public AbelianGroup.Member zero() { 55 return ZERO; 56 } 57 61 public boolean isZero(AbelianGroup.Member g) { 62 return g.equals(ZERO); 63 } 64 69 public boolean isNegative(AbelianGroup.Member a, AbelianGroup.Member b) { 70 return (a instanceof Member) && (b instanceof Member) && a.add(b).equals(ZERO); 71 } 72 75 public Monoid.Member identity() { 76 return ZERO; 77 } 78 82 public boolean isIdentity(Monoid.Member g) { 83 return g.equals(ZERO); 84 } 85 90 public boolean isInverse(Group.Member a, Group.Member b) { 91 return (a instanceof Member) && (b instanceof Member) && a.compose(b).equals(ZERO); 92 } 93 class Member implements AbelianGroup.Member, Group.Member { 94 95 private final int i; 96 public Member(int x) { 97 i = (x<0) ? x%order+order : x%order; 98 } 99 102 public boolean equals(Object o) { 103 return (o instanceof Member) && (i == ((Member)o).i); 104 } 105 public int hashCode() { 106 return i; 107 } 108 public Object getSet() { 109 return CyclicGroup.this; 110 } 111 115 public AbelianGroup.Member add(AbelianGroup.Member g) { 116 return new Member(i+((Member)g).i); 117 } 118 121 public AbelianGroup.Member negate() { 122 return new Member(-i); 123 } 124 128 public AbelianGroup.Member subtract(AbelianGroup.Member g) { 129 return new Member(i-((Member)g).i); 130 } 131 135 public Semigroup.Member compose(Semigroup.Member g) { 136 return new Member(i+((Member)g).i); 137 } 138 141 public Group.Member inverse() { 142 return new Member(-i); 143 } 144 } 145 } 146 | Popular Tags |