我需要素数的原始根。我写了这段代码,但它有堆大小错误,它不适用于像 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 是数组列表的数组列表,它包含从 1 到素数 1 之间的所有数字排列。它仅适用于像 7 或 11 这样的小素数。我增加了堆大小,但没有效果。