Ask Your Question

how can I manipulate a multiplicative group of Zmod(n)

asked 2021-06-23 17:52:38 +0200

Altario gravatar image

updated 2021-06-23 19:24:27 +0200

slelievre gravatar image


I want to create the multiplicative group $(\mathbb{Z}/7\mathbb{Z})^*=\{1,2,3,4,5,6\}$.

I did these steps:

sage: n = 7
sage: Zn = Zmod(n)
sage: G = Zn.unit_group()
sage: list(G)
[1, f, f^2, f^3, f^4, f^5]

Then I want to create the subgroups generated by $2=f^2$ which is $\{1,2,4\}$.

I did the following steps:

sage: f = G.gen()
sage: H = G.subgroup([f^2])
sage: list(H)
[1, f, f^2]

My problem is when I did

sage: Zn(f)

But here f needs to be 2. How can I solve this? Replace f by value?

edit retag flag offensive close merge delete


Welcome to Ask Sage! Thank you for your question.

slelievre gravatar imageslelievre ( 2021-06-23 19:11:08 +0200 )edit

For those interested, there is a parallel discussion on that topic on sage-devel :

tmonteil gravatar imagetmonteil ( 2021-06-24 02:42:53 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2021-06-25 10:06:48 +0200

slelievre gravatar image

updated 2021-07-05 19:18:25 +0200

Going through the group of units

This implementation suffers from the defect that

  • elements of H have G as their parent
  • but they display in terms of a generator of H

Here is a slightly convoluted way to work around this.

Define G and H:

sage: n = 7
sage: Zn = Zmod(n)
sage: G = Zn.unit_group()
sage: f = G.gen()
sage: H = G.subgroup([f^2])

List the elements of H (this displays using a different f):

sage: Hlist = list(H)
sage: Hlist
[1, f, f^2]

List the elements of H expressed in G:

sage: HlistG = list(prod((a^b for a, b in zip(H.gens(), h.list())), for h in H)
sage: HlistG
[1, f^2, f^4]

Get their values in Zn:

sage: HlistZn = [h.value() for h in HlistG]
sage: HlistZn
[1, 2, 4]

I opened a ticket to make this happen more naturally:

Direct access to generating sets for subgroups

The cyclic ring also has a method multiplicative_subgroups.

That method lists generating tuples for its multiplicative subgroups:

sage: n = 7
sage: Zn = Zmod(n)
sage: Sub = Zn.multiplicative_subgroups()
sage: Sub
((3,), (2,), (6,), ())

Sadly they do not give a hold on the subgroups as such.

sage: H = Sub[1]
sage: H
sage: parent(H)
<class 'tuple'>

Neither do the generators for these subgroups have these subgroups as parents.

Instead, they are simply elements of the initial cyclic ring.

sage: h = H[0]
sage: parent(h)
Ring of integers modulo 7
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2021-06-23 17:50:29 +0200

Seen: 797 times

Last updated: Jul 05 '21