素数の原始根が必要です.このコードを書きましたが、ヒープサイズエラーがあり、101のような大きな数では機能しません.原始根を計算するための他のアイデアはありません.もしあれば助けてください.素数の原始根を計算するための他のアルゴリズムはありますか?
static ArrayList<ArrayList<Integer>> list1=new ArrayList<ArrayList<Integer>>();
private static int primitiveRoot(int prim){
ArrayList<ArrayList<Integer>> number=new ArrayList<ArrayList<Integer>>();// this has all sequence numbers of x power of 0 to prime-1
ArrayList<Integer> sublist=new ArrayList<Integer>();
for (int x=2;x<prim;x++ ){
sublist = new ArrayList<Integer>();
for (int power=0;power<prim-1;power++){
int i=(int)((Math.pow(x, power))%prim);
sublist.add(i);
}
number.add(sublist);
}
for (int j=0;j<number.size();j++){
for (int m=0;m<list1.size();m++){
if(number.get(j).equals(list1.get(m)) ){// element of number arraylist compare to list1,equality means that we find one of primitive root
a=j+2;
break;
}
}
}
return a;// this is primitive root
}
list1 は arraylists の arraylist です。1 から素数 1 までの数値のすべての順列が含まれています。7 や 11 などの小さな素数に対してのみ機能します。ヒープ サイズを増やしましたが、効果はありませんでした。