【发布时间】:2011-01-31 21:00:31
【问题描述】:
在给定生成器的情况下,如何检查元素 a 是否属于特定的素数循环群 G?现在我只需生成组中的所有元素,将它们保存到容器中并检查元素是否在其中。这是我目前用来生成组中所有元素的代码:
public HashSet<BigInteger> group_elements(BigInteger g, BigInteger q) {
HashSet<BigInteger> group = new HashSet<BigInteger>();
BigInteger element = modPow(g,ONE,q);
for (int i = 2; !group.contains(element); i++) {
group.add(element);
element = modPow(g, BigInteger.valueOf(i), q);
}
return group;
}
要查看一个元素是否在组中,我只需检查:
if (group.contains(num)) { ... }
如您所见,语言是 Java
【问题讨论】:
-
您使用哪种语言并向我们展示您尝试过的内容
-
通常情况下,我不会只写出代码,但您的编程似乎还不错。我想,是问题的数学问题让你坚持了下来。
-
等等,什么?你的群是q阶的乘法群,对吧?所以 any 整数不能被 q 整除是群的一个元素。 [或者,如果你为每个残基类选择一个代表,就像你的代码那样,那么组就是 {1, ... , q-1}。] 不管怎样,你不必写那么多代码。 :-)
-
我假设提问者实际上是指 G 是由 g 生成的 (Z/q)* 的子群。
-
我已经删除了我的答案,因为我认为我对您所考虑的组类型有误。很抱歉造成混乱。
标签: java algorithm math cyclic