循环群发生器

时间:2013-01-25 20:55:49

标签: java cryptography goto algebra

我正在努力实现一种算法来搜索循环群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;

}

1 个答案:

答案 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;