CINTA作业四

第7章
1.群 Z ∗ 17 Z^{∗}17 Z17 有多少个生成元?已知 3 是其中一个生成元,请问 9 和 10 是否生成元?
解:阶为17-1=16
生成元为 ϕ(16)=8个
9 = 3 2 9=3^{2} 9=32,gcd(2,16)=2,所以9不是生成元。
10 = 3 3 m o d 17 10=3^{3}mod17 10=33mod17,gcd(3,16)=1,所以8的阶是16,即8是生成元。

2.p 和 q 是两个不同的素数,请问 Zpq 都多少个生成元?r 是任意正整数,请问 Z p r Zp^{r} Zpr都多少个生成元
解:Zpq的阶数为 ϕ ( p q ) = ϕ ( p ) ∗ ϕ ( q ) = ( p − 1 ) ∗ ( q − 1 ) \phi(pq)=ϕ(p)*ϕ(q)=(p-1)*(q-1) ϕ(pq)=ϕ(p)ϕ(q)=(p1)(q1)
生成元为 ϕ ( ( p − 1 ) ∗ ( q − 1 ) ) ϕ((p-1)*(q-1)) ϕ((p1)(q1))
Zpr的阶为 ϕ ( p r ) = p r − r ϕ(pr)=p^{r}-r ϕ(pr)=prr
生成元为 ϕ ( p r − r ) ϕ(p^{r}-r) ϕ(prr)

3.证明:如果群 G 没有非平凡子群,则群 G 是循环群。
若群 G只有平凡子群,则G中存在非单位元a可以生成循环群,所以G是循环群。

4.证明:设 G 为任意群,且 g ∈ G。如果存在 m, n ∈ Z 使得 g m = 1 且 g n = 1 ,则 g d = 1 , g^{m} = 1 且 g^{n} = 1,则g^{d} = 1, gm=1gn=1,则gd=1其中 d = gcd(m, n)。
由Bézout 定理,设d=gcd(m,n)=mr+ns。 g m r = 1 , g n s = 1 , 则 g m r ∗ g n s = g m r + n s = 1 , 即 g d = 1 。 g^{mr}=1,g^{ns}=1,则g^{mr}*g^{ns}=g^{mr+ns}=1,即g^{d}=1。 gmr=1,gns=1,gmrgns=gmr+ns=1,gd=1

第8章

  1. 设 G 是群,H 是 G 的子群。任取 g1, g2 ∈ G,则 g1H = g2H 当且仅当 g 1 − 1 g 2 ∈ H 。 g1^{−1}g2 ∈ H。 g11g2H
    证: g 1 − 1 g 2 ∈ H 。即 g 2 ∈ g 1 H g1^{−1}g2 ∈ H。即g2 ∈ g1H g11g2H。即g2g1H(两边左侧同时乘g1)。
    充分性:如果g1H = g2H ,则存在h1,h2∈ H使得g1h1=g2h2,即得 g 2 = g 1 h 1 h 2 − 1 g2=g1h1h2^{-1} g2=g1h1h21也即g2∈ g1H。
    必要性:如果g2 ∈ g1H,则g2H ∈ g1HH,又因为封闭性,所以g2 H∈ g1H。同理g1 H∈ g2H,所以g1H = g2H得证。

2.如果 G 是群,H 是群 G 的子群,且 [G : H] = 2,请证明对任意的 g ∈ G,gH = Hg。
证:由 [G : H] = 2可知G被H划分为两个集合,即有两个陪集,所以一个是H,另一个是G-H。
当g属于H时,由封闭性可得gH=Hg=H。当g属于G-H时,gH和Hg都不等于H,所以gH和Hg都等于G-H,即gH=Hg。

3.设 G 是阶为 pq 的群,其中 p 和 q 是素数。请证明 G 的任意非平凡子群是循环群
证:因为对任意 g ∈ G,g 的阶必然整除群 G 的阶,所以g的阶只有1,pq,p或q,因为是非平凡子群,所以G的子群的阶只能是p或q,又因为 G 的子群是素数阶有限群时,所以G的非平凡子群是循环群。

4.编程完成以下工作:对任意给定的一个素数 p,求出 Zp* 的最小生成元。任取一个整数 n,大于 1 小于 n 的所有素数 p,求 Zp* 的最小生成元,并求以上最小生成元集合中最大者所对应的素数 p。

对任意给定的一个素数 p,求出 Zp* 的最小生成元:
#include
#include
using namespace std;
int main()
{
int p; int i = 2; int arr[100]; int k = 0;
cout << “请输入p:”;
cin >> p; int p1 = p; int o = p - 1;
while (i <= o)
{
if (o % i == 0)
{
o = o / i;
arr[k] = i;//将素因子传入数组
k++;
}
else i++;
}
int temp = 0;
int gemeta[100]; int count = 0;
for (int a = 2; a < p1; a++)
{
int record = 1;
for (int i = 0; i < k; i++)
{
temp = pow(a,((p1-1)/arr[i]));
if ((temp % p1) == 1)
{
record = 0;
}
}
if (record == 1) { gemeta[count] = a; count++; }
}
cout << gemeta[0];
system(“pause”);
return 0;
}

任取一个整数 n,大于 1 小于 n 的所有素数 p,求 Zp* 的最小生成元,并求以上最小生成元集合中最大者所对应的素数 p:
#include
#include
using namespace std;
int main()
{
int arr[100];
int n;
cout << “请输入n:”;
cin >> n;
int Z[100]; Z[0] = 2;int y = 1;
for (int i = 3; i < n; i++)
{
int x = 1;
for (int j = 2; j < sqrt(n); j++)
{
if (i % j == 0)
{
x = 0;
}
}
if (x == 1) { Z[y] = i; y++; }
}
int max = 0; int d;
for (int b = 0; b < y; b++)
{
int temp0 = Z[b]-1; int k = 0; int i = 2;
while(i<= temp0)
{
if (temp0 % i == 0)
{
temp0 = temp0 / i;
arr[k] = i;//将素因子传入数组
k++;
}
else i++;
}
int temp = 0;
int gemeta[100] = {0}; int count = 0;
for (int a = 2; a <= Z[b]; a++)
{
int record = 1;
for (int l = 0; l < k; l++)
{
temp = pow(a, ((Z[b] - 1) / arr[l]));
if ((temp % Z[b]) == 1)
{
record = 0;
}
}
if (record == 1) { gemeta[count] = a; count++; }
}
cout << gemeta[0]<<" ";//最小生成元
if (gemeta[0] > max) { max = gemeta[0]; d = Z[b]; }
}
cout << endl;
cout << max << " " << d;
system(“pause”);
return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值