CINTA第四次作业

第七章


2、群Z_{17}^{*}有多少个生成元?已知3是其中一个生成元,请问6和10是否生成元?

 解:Z_{17}^{*}={1、2、3...16},群Z_{17}^{*}的阶为φ(17),φ(n)表示小于n且与n互质的正整数的个数,因为           17是一个质数,所以φ(17)=16。群Z_{17}^{*}是一个循环群,其生成元的个数等于φ(16) = 8。 因           此,群Z_{17}^{*}有8个生成元。

       因为9= 3^{2}\left ( mod17 \right ),gcd(2 , 16) = 2 ,所以9不是生成元。

       因为10= 3^{3}\left ( mod17 \right ),gcd(3 , 16) = 1 ,所以10是生成元。

3、p 和 q 是两个不同的素数,请问Z_{pq}有多少个生成元?r是任意正整数,请问Z_{p^{r}}有多少个生成元?

 解:根据欧拉定理,Z_{pq}的阶数=φ(pq) = φ(p)·φ(q) = (p-1)·(q-1) ,所以有 (p-1)·(q-1) 个生成元 。

①如果 r=1 ,那么Z_{p^{r}}有 p-1 个生成元

②如果 r≥2 ,Z_{p^{r}}是循环群,所以Z_{p^{r}}的阶为φ(p^{r}),因为p是素数,所以φ(p^{r})=p^{r}p^{r-1},所以有p^{r}p^{r-1}个生成元。

6、证明:如果群G没有非平凡子群,则群G是循环群。

证明:首先,我们知道对于任意群G,群本身和平凡子群{e}都是G的子群。因此,当群G没有非平     凡子群时,意味着除了群本身和平凡子群之外,没有其他的子群存在。

①当G={e}时,显然,群G是循环群

②当G≠{e}时,由命题7.1:G是群,任意g∈G,则集合〈g〉={g^{k}:k∈Z}是G的子群,称〈g〉为     由g生成的循环群。所以〈g〉是平凡子群{e}或群本身G。因为〈g〉是循环群,所以G也是循环       群。

8、证明:设G为任意群,且g∈G。如果存在m,n∈G使得g^{m}=1且g^{n}=1,则g^{d}=1,其中d=gcd(m,n)。

 证明:因为d=gcd(m,n),根据B\acute{e}zout定理:设a和b为非零整数,存在整数r和s使得gcd(a,b)= ar + bs 。所以d=gcd(m,n)= mr + ns 。 因为g^{m}=1,所以g^{m^{r}}=1即g^{mr}=1 ;同理,g^{ns}=1 。所以g^{d}=g^{mr+ns}=g^{mr}· g^{ns} = 1 。


第八章


1、设G是群,H是G的子群。任取g_{1}g_{2}∈G,则 g_{1}H = g_{2}H 当且仅当g_{1}^{-1}g_{2}∈H。

①充分性:存在h_{1}h_{2} ∈ H,因为g_{1}H = g_{2}H,使得g_{1}h_{1} = g_{2}h_{2} 、所以h_{1}{h_{2}}^{-1} = {g_{1}}^{-1}g_{2} 。由群      的公理易知h_{1}{h_{2}}^{-1}∈ H,所以{g_{1}}^{-1}g_{2} ∈ H 。

②必要性:存在 h ∈ H ,{g_{1}}^{-1}g_{2} ∈ H ,使得{g_{1}}^{-1}g_{2} = h ,即g_{2} = g_{1}h_{1} ,即 g_{2} ∈ g_{1}H ,由命题      8.1.陪集的属性得 g_{1}H = g_{2}H 。

3、如果G是群,H是G的子群,且[G:H] = 2,请证明对任意的g∈G,gH=Hg。

证明:因为 [G:H] = 2 ,可知群G被划分为2个不同的左陪集。分别记为 H 和 K

    ①当 g ∈ H 时 ,由群公理封闭性得 gH = Hg = H

    ②当 g ∉ H 时 ,则gH ≠ H ,Hg≠H,由于[G:H]=2,故 gH = Hg = K

5、设G是阶为pq的群,其中p和q是素数。请证明G的任意非平凡子群是循环群。

证明:因为 p,q 是素数,所以pq的因子只有1,p,q,pq 。因为是非平凡子群,所以G的非平凡      子群的阶只能是p或q,由拉格朗日定理推论得,因为G的非平凡子群是素数阶有限群,所以G的      任意非平凡子群是循环群。

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

//对任意给定的一个素数p,求出模p的乘法群的最小生成元。
#include <iostream>
#include <vector>

bool is_prime(int n) {
	if (n <= 1) {
		return false;
	}
	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			return false;
		}
	}
	return true;
}

int mod_mult_group_generator(int p) {
	std::vector<int> factors;
	int phi = p - 1;
	for (int i = 2; i * i <= phi; i++) {
		if (phi % i == 0) {
			factors.push_back(i);
			if (i != phi / i) {
				factors.push_back(phi / i);
			}
		}
	}
	for (int g = 2; g < p; g++) {
		bool is_generator = true;
		for (int factor : factors) {
			if ((long long)std::pow(g, factor) % p == 1) {
				is_generator = false;
				break;
			}
		}
		if (is_generator) {
			return g;
		}
	}
	return -1; // No generator found
}

int main() {
	int p;
	std::cout << "请输入一个素数p:";
	std::cin >> p;
	if (!is_prime(p)) {
		std::cout << "输入的数不是素数" << std::endl;
		return 1;
	}
	int generator = mod_mult_group_generator(p);
	std::cout << "模" << p << "的乘法群的最小生成元为: " << generator << std::endl;
	return 0;
}


//输入一个整数n,对大于1小于n的所有素数p,求模p的乘法群的最小生成元集并输出,求以上最小生成元集合中最大者所对应的素数p并输出
#include <iostream>
#include <vector>
#include <cmath>

bool is_prime(int n) {
	if (n <= 1) {
		return false;
	}
	for (int i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			return false;
		}
	}
	return true;
}

int mod_mult_group_generator(int p) {
	std::vector<int> factors;
	int phi = p - 1;
	for (int i = 2; i * i <= phi; i++) {
		if (phi % i == 0) {
			factors.push_back(i);
			if (i != phi / i) {
				factors.push_back(phi / i);
			}
		}
	}
	for (int g = 2; g < p; g++) {
		bool is_generator = true;
		for (int factor : factors) {
			if (std::pow(g, factor) % p == 1) {
				is_generator = false;
				break;
			}
		}
		if (is_generator) {
			return g;
		}
	}
	return -1; // No generator found
}

int main() {
	int n;
	std::cout << "请输入一个整数n:";
	std::cin >> n;
	int max_generator = 0;
	int max_p = 0;
	for (int p = 2; p < n; p++) {
		if (is_prime(p)) {
			int generator = mod_mult_group_generator(p);
			std::cout << "模" << p << "的乘法群的最小生成元为: " << generator << std::endl;
			if (generator > max_generator) {
				max_generator = generator;
				max_p = p;
			}
		}
	}
	std::cout << "最大生成元对应的素数p为: " << max_p << std::endl;
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值