有没有人知道并行素数分解算法的方法是什么?
我无法弄清楚算法的哪个阶段应该将它划分为线程.. 如何以并行方式考虑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;
}
答案 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)并且从那里开始反对从一开始就可能有更好的表现。