并行素数分解

时间:2013-05-08 13:43:15

标签: java

有没有人知道并行素数分解算法的方法是什么?

我无法弄清楚算法的哪个阶段应该将它划分为线程.. 如何以并行方式考虑Prime因子分解?

考虑以下一个线程代码:

    public static void  primeFactorization(ArrayList<Integer> factors, int num){
        //factors is an array to save the factorization elements
        //num is the number to be factorized 
        int limit = num/2+1;

        if(isPrime(num))
            factors.add(num);

        else{
            while(num%2==0){
                factors.add(2);
                num=num/2;
            }

           for (int i=3; i<limit; i+=2){
               while (isPrime(i) && num%i==0){
                   factors.add(i);
                    num = num/i;
               }
           }
       }
    }

    private static boolean isPrime(int x) {
          int top = (int)Math.sqrt(x);
          for (int i = 2; i <= top; i++)
             if ( x % i == 0 )
                return false;
          return true;
    }

1 个答案:

答案 0 :(得分:0)

似乎这对Fork/Join Framework非常有用。看起来你应该能够通过递归传递你找到的新因子来使用它。试着看看RecursiveAction。在伪代码中,您应该能够执行以下操作:

public void getFactors(List<Integer> factors, int num){
    if(you can find a factor){
        add the two factors to the pool to be factored further
    }
    else{
        factors.add(num);
    }  
}

作为旁注,如果你从中间开始(num / 2)并且从那里开始反对从一开始就可能有更好的表现。