【发布时间】:2013-01-16 12:27:25
【问题描述】:
我需要素数的原始根。我写了这段代码,但它有堆大小错误,它不适用于像 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 这样的小素数。我增加了堆大小,但没有效果。
【问题讨论】:
-
我会尝试选择更多标签,例如
primitive、root、algorithm等。 -
我完全不懂你的程序。
list1一直是空的,a是什么? -
List1 是数组列表的数组列表。我有一个子列表 [1,2,....,prim-1] 并且 List1 包含子列表的所有排列。它不是空的。a 是素数的原始根号码。