Java 并行素因子分解

Java 并行素因子分解,java,Java,有人知道并行素数分解算法的方法吗 我不知道在算法的哪个阶段我应该把它分成线程。。 我如何以并行的方式考虑素因子分解 考虑以下单线程代码: public static void primeFactorization(ArrayList<Integer> factors, int num){ //factors is an array to save the factorization elements //num is the number t

有人知道并行素数分解算法的方法吗

我不知道在算法的哪个阶段我应该把它分成线程。。 我如何以并行的方式考虑素因子分解

考虑以下单线程代码:

    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;
    }
publicstaticvoidprimefactorization(arraylistfactors,int-num){
//factors是保存因式分解元素的数组
//num是要分解的数字
int limit=num/2+1;
if(isPrime(num))
因子。添加(num);
否则{
而(数值%2==0){
增加(2);
num=num/2;
}

对于(int i=3;i这似乎是对的一个很好的使用。似乎您应该能够通过递归地传递找到的新因子来使用它。请尝试查看一下。在伪代码中,您应该能够执行以下操作:

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);
    }  
}
public-void-getFactors(列表因子,int-num){
如果(你能找到一个因素){
将这两个因素添加到要进一步考虑的池中
}
否则{
因子。添加(num);
}  
}

作为一个旁注,如果你开始在中间(num/2),从一开始就反对一个,它可能会有更好的性能。

你能解释一下并行素数分解是什么,以及它应该做什么?你可以一次检查很多素数,一开始,1。为了更快地获得更好的帮助,发布一篇文章。2)对代码块使用一致的逻辑缩进。代码缩进的目的是帮助人们理解程序流程。您希望For循环的每次迭代都有一个自己的线程。无需自责。您可以问任意多的问题。实际上,它甚至不需要框架。他只需要为找到的每个因子生成一个新线程,然后使用某种同步对象来收集所有因子。为什么我要为一个因子创建一个线程?它是一个素数,因此不再需要计算。为什么它需要一个线程?你不需要为因子创建线程,你可以使用线程pooling(fork/join框架内置的).你基本上可以分解寻找因子的任务。当你找到一个新的因子时,把两个新因子都扔进池中进一步分解。我刚刚有了一个想法…每个自然数只有一个因子分解…我可以通过创建4个线程来利用这个事实,每个线程将检查不同范围内的可除素数mbers..第一个线程将查找2到50之间的素数..等等..然后我找到的所有素数都将是我的因式分解..我不确定这是正确的方法。您需要小心不要包含重复值。例如,一个线程可能会发现2*25=50,另一个线程也可能会看到25*2=50。这样可能更安全使用某种形式的线程池,其中每个因子都被添加到池中以进一步分解。这将避免包含重复数字的可能性。