题目:编写一个函数求循环群的一个生成元,使用java代码实现函数输入:一个大素数p,类型为BigInteger函数返回值:输出素域p的一个生成元g,类型为BigInteger

解决方案 »

  1.   

     public static BigInteger getG(BigInteger p, BigInteger p_MinusOne) {
            BigInteger g = null;        outterLoop: for (int i = 2; i < 50; i++) {
                for (int x1 = 1; x1 <= Integer.valueOf(p_MinusOne.toString()); x1++) {
                    String str1 = String.valueOf(i);
                    String str2 = String.valueOf(x1);
                    BigInteger tmp1 = new BigInteger(str1);
                    BigInteger tmp2 = new BigInteger(str2);
                    if (tmp1.modPow(tmp2, p).compareTo(ONE) == 0 && tmp2.compareTo(p_MinusOne) == -1) {
                        break;
                    } else if (tmp1.modPow(tmp2, p).compareTo(ONE) == 0 && tmp2.compareTo(p_MinusOne) == 0) {
                        g = tmp1;
                        break outterLoop;
                    }
                }
            }        return g;
        }