Java 在素数阶循环群中寻找元素
给定生成器,如何检查元素a是否属于素数阶的特定循环群G?现在,我只需生成组中的所有元素,将它们保存到一个容器中,并检查该元素是否在其中。这是im当前用于生成组的所有元素的代码:Java 在素数阶循环群中寻找元素,java,algorithm,math,cyclic,Java,Algorithm,Math,Cyclic,给定生成器,如何检查元素a是否属于素数阶的特定循环群G?现在,我只需生成组中的所有元素,将它们保存到一个容器中,并检查该元素是否在其中。这是im当前用于生成组的所有元素的代码: public HashSet<BigInteger> group_elements(BigInteger g, BigInteger q) { HashSet<BigInteger> group = new HashSet<BigInteger>(); BigInt
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;
}
正如您所看到的,该语言是Java,请查看问题和解决问题的方法。请查看问题和解决问题的方法。也许您有关于该组外观的更多信息 如果你知道由G生成的群G的顺序,如果q是素数(你只告诉我们G的顺序是素数,但与q无关),那么你可以通过测试来检查元素x是否在G中 1=xord(G)mod q
如果q不是素数,则此测试不起作用。反例是g=22,q=91,x=53。这里g生成具有元素{1,22,29}的子组。x也有3阶,但不是g生成的子群的元素 也许你有更多关于团队的信息 如果你知道由G生成的群G的顺序,如果q是素数(你只告诉我们G的顺序是素数,但与q无关),那么你可以通过测试来检查元素x是否在G中 1=xord(G)mod q
如果q不是素数,则此测试不起作用。反例是g=22,q=91,x=53。这里g生成具有元素{1,22,29}的子组。x也有3阶,但不是g生成的子群的元素 你在使用哪种语言,并向我们展示你尝试过的东西。通常,我不会只写代码,但你的编程看起来不错。我想是这个问题的数学问题让你受不了。等等,什么?你们的群是q阶的乘法群,对吗?所以任何不能被q整除的整数都是群的一个元素。[或者,如果您要为每个剩余类选择一个代表,就像您的代码那样,那么该组就是{1,…,q-1}.]无论哪种方式,您都不必编写那么多代码。:-)我假设提问者实际上是指G是G生成的(Z/q)*的子群。我删除了我的答案,因为我认为我对你所想的是什么样的群的看法是错误的。很抱歉造成混淆。您使用的是哪种语言,并向我们展示您尝试过的内容。通常,我不会只写代码,但您的编程似乎很好。我想是这个问题的数学问题让你受不了。等等,什么?你们的群是q阶的乘法群,对吗?所以任何不能被q整除的整数都是群的一个元素。[或者,如果您要为每个剩余类选择一个代表,就像您的代码那样,那么该组就是{1,…,q-1}.]无论哪种方式,您都不必编写那么多代码。:-)我假设提问者实际上是指G是G生成的(Z/q)*的子群。我删除了我的答案,因为我认为我对你所想的是什么样的群的看法是错误的。很抱歉给你带来了困惑。
if (group.contains(num)) { ... }