Project Euler – Problem 60

Problem 60:
The primes 3, 7, 109, and 673, are quite remarkable. By taking any two primes and concatenating them in any order the result will always be prime.

For example, taking 7 and 109, both 7109 and 1097 are prime. The sum of these four primes, 792, represents the lowest sum for a set of four primes with this property.

Find the lowest sum for a set of five primes for which any two primes concatenate to produce another prime.

import java.math.BigInteger;
import java.util.Vector;

class runner2
{	
	//3 [11 13 17 19 23 29 31 37 41 43 47 53]
	//11 [13 17 23 29 31 37 41 43 47 53]
	private static Vector parseSet(Vector currentSet, int currentCount) {
		if(currentSet.size() <= 1) return currentSet;

		Vector result = new Vector();
		int biggestSize = 0;
		for(int i=0; i subSet = new Vector();			
			for(int j=i+1; j validOnes = new Vector(500);
			for(int j=i+1; j<10000; j++){//1000000
				BigInteger bj = new BigInteger(""+j);
				if(!bj.isProbablePrime(100)) continue;

				String ij = ""+i+j, ji = ""+j+i;
				BigInteger bij = new BigInteger(ij), bji = new BigInteger(ji);
				if(!bij.isProbablePrime(100) || !bji.isProbablePrime(100)) continue;

				validOnes.add(bj);
			}

			if(validOnes.size() < limit) continue;//Requires at least five elements
			//Begin cyclical parsing..
			Vector result = parseSet(validOnes, limit-1);
			if(result.size() == limit-1){
				int sum = 0;
				result.add(bi);
				for(BigInteger a : result){
					sum += a.intValue();
					System.out.println(a);
				}
				System.out.println("sum: "+sum);
				break;
			}
		}

		System.out.println("time: "+(System.currentTimeMillis() - time));
	}
}


Note: Unfortunately, the solution didn’t come to me quickly (took 3-4 days), which is why “parseSet” is a pretty ugly mess.