java - 在素数阶循环群中查找元素

标签 java algorithm math cyclic

在给定生成器的情况下,如何检查元素 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

最佳答案

也许您有更多关于该组的信息。

如果你知道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 生成的子群的元素。

关于java - 在素数阶循环群中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518279/

相关文章:

c++ - 如何访问来自不同类的变量?

java - 将字符串 append 到 native Java 数组

java - HSQLDB 从 JDBC 结果集中删除行

java - 将实体对象传递到 JFrame

math - 在频域中乘以图像

javascript - 查找数字范围内的差距

java - Hadoop使用Java递归地将fsPermission设置为dir

algorithm - 较小图上的图同构但大量测试

algorithm - 视频图像差异中的边界框

java - 我如何计算重复的单词?