第七章作业
第七章作业
第七章作业
2.
群
Z
17
∗
有多少个生成元?已知
3
是其中一个生成元,请问
9
和
10
是否生成元?
2.群Z_{17}^{*}有多少个生成元?已知 3 是其中一个生成元,请问 9 和 10 是否生成元?
2.群Z17∗有多少个生成元?已知3是其中一个生成元,请问9和10是否生成元?
解:
群
Z
17
∗
有
ϕ
(
17
−
1
)
=
8
个生成元
群Z_{17}^{*}有\phi(17-1)=8个生成元
群Z17∗有ϕ(17−1)=8个生成元
命题7.5表述为:
设群
G
=
<
g
>
是阶为
n
的循环群。如果
h
=
g
k
,则
h
的阶为
n
/
d
,其中
d
=
g
c
d
(
k
,
n
)
。
设群 G = <g> 是阶为 n 的循环群。如果 h = g^{k},则 h 的阶为 n/d,其中 d = gcd(k, n)。
设群G=<g>是阶为n的循环群。如果h=gk,则h的阶为n/d,其中d=gcd(k,n)。
已知3是一个生成元,即群<3>是阶为16的循环群,
9
=
3
2
,
g
c
d
(
2
,
16
)
=
2
9=3^{2},gcd(2,16)=2
9=32,gcd(2,16)=2,所以9的阶为16/2=8,9不是生成元
10
=
3
3
,
g
c
d
(
3
,
16
)
=
1
10=3^{3},gcd(3,16)=1
10=33,gcd(3,16)=1,所以9的阶为16/1=16,10是生成元
3.
p
和
q
是两个不同的素数,请问
Z
p
q
都多少个生成元?
r
是任意正整数,请问
Z
p
r
都多
3. p 和 q 是两个不同的素数,请问 Z_{pq}都多少个生成元?r 是任意正整数,请问 Z_{p^{r}}都多
3.p和q是两个不同的素数,请问Zpq都多少个生成元?r是任意正整数,请问Zpr都多
少个生成元?
少个生成元?
少个生成元?
解:群
Z
p
q
有
ϕ
(
p
q
)
=
ϕ
(
p
)
ϕ
(
q
)
=
(
p
−
1
)
(
q
−
1
)
个生成元
解: 群Z_{pq}有\phi(pq)=\phi(p)\phi(q)=(p-1)(q-1)个生成元
解:群Zpq有ϕ(pq)=ϕ(p)ϕ(q)=(p−1)(q−1)个生成元
群
Z
p
r
有
ϕ
(
p
r
)
=
ϕ
r
(
p
)
=
(
p
−
1
)
r
个生成元
群Z_{p^{r}}有\phi(p^{r})=\phi^{r}(p)=(p-1)^{r}个生成元
群Zpr有ϕ(pr)=ϕr(p)=(p−1)r个生成元
6.
证明:如果群
G
没有非平凡子群,则群
G
是循环群。
6.证明:如果群 G 没有非平凡子群,则群 G 是循环群。
6.证明:如果群G没有非平凡子群,则群G是循环群。
证明:任意群本身也是它自己的子群,而群G没有非平凡子群
那么,群G就是平凡群,即G={e}
下面证明平凡群是循环群:
从群G中取一元素作为生成元生成一个循环群
G
1
G_{1}
G1
G
1
=
<
e
>
=
e
=
G
G_{1}=<e>={e}=G
G1=<e>=e=G
所以,群G也是循环群。
8.
证明:设
G
为任意群,且
g
∈
G
。如果存在
m
,
n
∈
Z
使得
g
m
=
1
且
g
n
=
1
,则
g
d
=
1
,其中
d
=
g
c
d
(
m
,
n
)
。
8.证明:设 G 为任意群,且 g ∈ G。如果存在 m, n ∈ Z 使得 g^{m}=1 且 g^{n} = 1,则g^{d} = 1,其中 d = gcd(m, n)。
8.证明:设G为任意群,且g∈G。如果存在m,n∈Z使得gm=1且gn=1,则gd=1,其中d=gcd(m,n)。
证明:
g
∈
G
,设群
G
1
是由
g
生成的阶为
x
的循环群
证明:g\in G,设群G_{1}是由g生成的阶为x的循环群
证明:g∈G,设群G1是由g生成的阶为x的循环群
命题7.4表述为:
任取正整数
n
,设
G
=
<
g
>
是阶为
n
的循环群,则
g
k
=
e
当且仅当
n
整除
k
。
任取正整数 n,设 G = <g> 是阶为 n 的循环群,则 g^{k} = e 当且仅当 n 整除 k。
任取正整数n,设G=<g>是阶为n的循环群,则gk=e当且仅当n整除k。
因为
g
m
=
1
且
g
n
=
1
,所以
x
整除
m
,
x
整除
n
,
x
是
m
,
n
的公因子
因为g^{m}=1 且 g^{n} = 1,所以x整除m,x整除n,x是m,n的公因子
因为gm=1且gn=1,所以x整除m,x整除n,x是m,n的公因子
而
d
=
g
c
d
(
m
,
n
)
,所以
x
⩽
d
,且
x
整除
d
,所以
g
d
=
1
而d=gcd(m,n),所以x \leqslant d,且x整除d,所以g^{d}=1
而d=gcd(m,n),所以x⩽d,且x整除d,所以gd=1
第八章作业
第八章作业
第八章作业
1.
设
G
是群,
H
是
G
的子群。任取
g
1
,
g
2
∈
G
,则
g
1
H
=
g
2
H
,
当且仅当
g
1
−
1
g
2
∈
H
。
1.设 G 是群,H 是 G 的子群。任取 g_{1}, g_{2} ∈ G,则 g_{1}H = g_{2}H,当且仅当 g_{1}^{−1}g_{2}\in H。
1.设G是群,H是G的子群。任取g1,g2∈G,则g1H=g2H,当且仅当g1−1g2∈H。
证明:先证必要性:
任取
g
1
,
g
2
∈
G
,则
g
1
H
=
g
2
H
,
那么,
∃
h
1
、
h
2
∈
H
,
s
t
g
1
h
1
=
g
2
h
2
任取 g_{1}, g_{2} ∈ G,则 g_{1}H = g_{2}H,那么,\exists h_{1}、h_{2}\in H,stg_{1}h_{1} = g_{2}h_{2}
任取g1,g2∈G,则g1H=g2H,那么,∃h1、h2∈H,stg1h1=g2h2
整理得,
g
1
−
1
g
2
=
h
1
h
2
−
1
g_{1}^{-1}g_{2}=h_{1}h_{2}^{-1}
g1−1g2=h1h2−1
h
1
、
h
2
均在群
H
中,
h
1
h
2
−
1
∈
H
,所以
g
1
−
1
g
2
∈
H
h_{1}、h_{2}均在群H中,h_{1}h_{2}^{-1}\in H,所以g_{1}^{−1}g_{2}\in H
h1、h2均在群H中,h1h2−1∈H,所以g1−1g2∈H
再证充分性:
要证明
A
、
B
两集合相等,需要证明
A
、
B
两集合元素个数相等,以及证明
A
⊂
B
,
B
⊂
A
要证明A、B两集合相等,需要证明A、B两集合元素个数相等,以及证明A\subset B,B\subset A
要证明A、B两集合相等,需要证明A、B两集合元素个数相等,以及证明A⊂B,B⊂A
首先,
∣
g
1
H
∣
=
∣
g
2
H
∣
=
∣
H
∣
首先,|g_{1}H|=|g_{2}H|=|H|
首先,∣g1H∣=∣g2H∣=∣H∣
要证明
g
1
H
⊂
g
2
H
,
即证明
∀
h
1
∈
H
,
∃
h
2
∈
H
,
s
t
g
1
H
=
g
2
H
要证明g_{1}H\subset g_{2}H,即证明\forall h_{1}\in H,\exists h_{2}\in H,st g_{1}H = g_{2}H
要证明g1H⊂g2H,即证明∀h1∈H,∃h2∈H,stg1H=g2H
而
g
1
−
1
g
2
∈
H
,
∃
h
∈
H
,
s
t
g
1
−
1
g
2
=
h
而g_{1}^{−1}g_{2}\in H,\exists h\in H,st g_{1}^{−1}g_{2}=h
而g1−1g2∈H,∃h∈H,stg1−1g2=h
对
∀
h
1
∈
H
,
∃
h
2
∈
H
,
s
t
h
1
h
2
−
1
=
h
,即
对\forall h_{1}\in H,\exists h_{2}\in H,sth_{1}h_{2}^{-1}=h,即
对∀h1∈H,∃h2∈H,sth1h2−1=h,即
g
1
−
1
g
2
=
h
1
h
2
−
1
g_{1}^{-1}g_{2}=h_{1}h_{2}^{-1}
g1−1g2=h1h2−1
整理得,
g
1
H
=
g
2
H
,所以
g
1
H
⊂
g
2
H
整理得,g_{1}H = g_{2}H,所以g_{1}H\subset g_{2}H
整理得,g1H=g2H,所以g1H⊂g2H
要证明
g
2
H
⊂
g
1
H
,
即证明
∀
h
2
∈
H
,
∃
h
1
∈
H
,
s
t
g
1
H
=
g
2
H
要证明g_{2}H\subset g_{1}H,即证明\forall h_{2}\in H,\exists h_{1}\in H,st g_{1}H = g_{2}H
要证明g2H⊂g1H,即证明∀h2∈H,∃h1∈H,stg1H=g2H
证明方法同上,所以
g
2
H
⊂
g
1
H
g_{2}H\subset g_{1}H
g2H⊂g1H
综上,
g
1
H
=
g
2
H
综上,g_{1}H = g_{2}H
综上,g1H=g2H
3.
如果
G
是群,
H
是群
G
的子群,且
[
G
:
H
]
=
2
,请证明对任意的
g
∈
G
,
g
H
=
H
g
。
3.如果G是群,H是群 G 的子群,且[G : H]=2,请证明对任意的 g ∈ G,gH = Hg。
3.如果G是群,H是群G的子群,且[G:H]=2,请证明对任意的g∈G,gH=Hg。
证明:因为[G : H]=2,即群G被两个陪集划分。
若
g
∈
H
,则
g
H
=
H
=
H
g
,原命题成立。
若g\in H,则gH=H=Hg,原命题成立。
若g∈H,则gH=H=Hg,原命题成立。
若
g
∉
H
,则群
G
被左陪集
g
H
和
H
划分,群
G
被右陪集
H
g
和
H
划分
若g\not\in H,则群G被左陪集gH和H划分,群G被右陪集Hg和H划分
若g∈H,则群G被左陪集gH和H划分,群G被右陪集Hg和H划分
同样有
g
H
=
H
g
同样有gH = Hg
同样有gH=Hg
5.
设
G
是阶为
p
q
的群,其中
p
和
q
是素数。请证明
G
的任意非平凡子群是循环群。
5.设 G 是阶为 pq 的群,其中 p 和 q 是素数。请证明 G 的任意非平凡子群是循环群。
5.设G是阶为pq的群,其中p和q是素数。请证明G的任意非平凡子群是循环群。
证明:设群H是群G的子群,由拉格朗日定理可得, |G|/|H| = [G : H]
|G|=pq,p、q均是素数,所以|H|=p或q或1或pq
当|H|=1或pq时,H是群G的平凡子群,不在本题考虑范围内
当|H|=p或q时,推论8.2表述为:
设
G
是素数阶有限群,即
∣
G
∣
=
p
,
p
是素数,则
G
是循环群且任意非单位元元素
,
g
∈
G
是生成元。
设 G 是素数阶有限群,即 |G| = p,p 是素数,则 G 是循环群且任意非单位元元素,g\in G 是生成元。
设G是素数阶有限群,即∣G∣=p,p是素数,则G是循环群且任意非单位元元素,g∈G是生成元。
群H的阶为素数,所以群H是循环群
9. 编程完成以下工作:对任意给定的一个素数 p ,求出 Z p ∗ 的最小生成元。任取一个整数 n ,对大于 1 小于 n 的所有素数 p ,求 Z p ∗ 的最小生成元,并求以上最小生成元集合中最大者所对应的素数 p 。 9.编程完成以下工作:对任意给定的一个素数 p,求出 Z_{p}^{*} 的最小生成元。任取一个整数 n,对大于 1 小于 n 的所有素数 p,求 Z_{p}^{*} 的最小生成元,并求以上最小生成元集合中最大者所对应的素数 p。 9.编程完成以下工作:对任意给定的一个素数p,求出Zp∗的最小生成元。任取一个整数n,对大于1小于n的所有素数p,求Zp∗的最小生成元,并求以上最小生成元集合中最大者所对应的素数p。
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) {
return false;
}
}
return true;
}
int getMinGenerator(int p) {
for (int g = 2; g < p; ++g) {
bool isGenerator = true;
for (int i = 1; i < p - 1; ++i) {
if ((int)pow(g, i) % p == 1) {
isGenerator = false;
break;
}
}
if (isGenerator) {
return g;
}
}
return -1; // 如果找不到生成元则返回-1
}
int main() {
cout << "1.输入一个素数" << endl;
cout << "2.输入任意一个整数" << endl;
cout << "请输入你的选择:";
int choice;
cin >> choice;
if (choice == 1) {
int p;
cout << "请输入一个素数:";
cin >> p;
if (isPrime(p)) {
int minGenerator = getMinGenerator(p);
cout << "最小生成元g=" << minGenerator << endl;
}
else {
cout << "输入的不是一个素数" << endl;
}
return 0;
}
else if (choice == 2) {
int n;
cout << "请输入一个整数n:" << endl;
cin >> n;
vector<int> minGenerators;
for (int p = 2; p < n; ++p) {
if (isPrime(p)) {
int minGenerator = getMinGenerator(p);
minGenerators.push_back(minGenerator);
std::cout << "素数p=" << p << ",最小生成元g=" << minGenerator << endl;
}
}
int maxGenerator = *std::max_element(minGenerators.begin(), minGenerators.end());
int maxPrime = 0;
for (int p = 2; p < n; ++p) {
if (isPrime(p) && getMinGenerator(p) == maxGenerator) {
maxPrime = p;
break;
}
}
cout << "最大生成元对应的素数p=" << maxPrime << endl;
return 0;
}
else {
cout << "输入错误" << endl;
return 0;
}
}