私は群論のどん底に投げ込まれ、私が持っている暗号学のクラスに少し迷っています。基本的に私がJavaで実装しなければならない実用的なものは、
order(素数, p-1 の因数のリスト, 任意の a)
これは、グループ Z*p 内の a の順序を返す必要があります。ここで、f は p-1 の素因数のリストです。f に重複が含まれる場合にメソッドが機能することを確認します。たとえば、p=17 の場合を考えてみましょう
これが私がこれまでに持っているものです(メモ内の手順から取得)
public static BigInteger order(BigInteger p, List<BigInteger> f, BigInteger a){
//Algorithm starts like this
//Start by setting t equal to p-1 i.e t= p1 p2...pn
BigInteger t = p.subtract(BigInteger.ONE);
for(BigInteger pi : f){
//test if a^t1 = 1 mod p where t1 = t/pi
BigInteger t1 = t.divide(pi);
if(Practical5ExponentiationModMSquareAndMultiply.expm(p, a, t1).equals(BigInteger.ONE)){
t = t1;
System.out.println("t after mod = "+t);
System.out.println("pi after mod = "+pi);
}
}
return t;
}
素因数 f のリストは別のメソッドによって生成され、次に渡されます
私が持っているメモは理解するのが非常に難しく、実際に何を返すべきか教えてくれる人がいるかどうか疑問に思っていました. また、この群論のスニペットを理解できるように教えてください。それは私のさらなる実践に役立ちます。