我正在努力实现一种算法来搜索循环群G的生成器:
n是组G的阶数,Pi是n分解为素数,如n = P1 ^ e1 x P2 ^ e2 .... x Pk ^ ek
这是算法:
步骤1:从G
中选择一个元素g
第2步:对于从1到k的每个i做
步骤2.1:b < - pow(g,n / Pi)
步骤2.3:如果b = 1,则转到步骤1
第3步:返回g
这是我在java中的实现,我想使用goto但它会产生错误:
public int getGenerateur(){
List<Integer> facteur=new ArrayList<Integer>();
facteur=this.getFacteur(nombre);
double b;
int generateur=0;
boolean etape = true;
while(etape){
etape = false;
System.out.println("generateur aleatoire:");
generateur =(int) (Math.random() * (nombre - 2)) + 2;
System.out.println(generateur);
for(int s=0;s<facteur.size();s++){
b=Math.pow(generateur,(nombre/facteur.get(s)))%(nombre+1);
System.out.println("b= "+b);
if(b==1){
etape = true;
break;
}
}
}
return generateur;
}
答案 0 :(得分:3)
如果你使用外部循环和break语句,你应该能够做你想做的事情。它看起来像这样
boolean etape = true;
while(etape){
etape = false;
System.out.println("Entrer un generateur :");
generateur = sc.nextInt();
for(int s=0;s<facteur.size();s++){
b=Math.pow(generateur,(nombre/facteur.get(s)))%(nombre+1);
System.out.println("b= "+b);
if(b==1){
etape = true;
break;
}
}
}
return generateur;