Hello @all,
I’ve only learnt a bit about parallelization of programs, but, I’m now facing what seems to be an embarassingly parallel situation.
I simply need to compute and list ALL twin primes below N specifically in Java.
I think I’ve done some decent algorithmic optimizations to tackle this.
But, this will be solely a speed competition, and my code runs in 2m and 46s for N=100.000.000
I was wondering how I can exploit Java’s concurrency mechanism to speed up my code?
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main
{
public static int isprime(long x)
{
long max= (long) Math.sqrt(x);
long i;
long dx=4;
for(i=5; i<=max; dx=-(dx-6),i+=dx)
if( (x%i) ==0)
return 0;
return 1;
}
public static void main(String[] args)
{
long i,count=1;
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if(n>=3)
System.out.printf("%d ", 3);
for(i=5;i+2<=n;i+=6)
if(isprime(i)==1 && isprime(i+2)==1)
{
System.out.printf("%d %d " ,i,i+2);
count++;
}
//printf("\b \n\nTotal Primes within range: %d\n",count);
}
}
If anyone could either help doing the paralellization thing or even improving the algorithm, I’d be really glad
Best,
Bruno