I believe the best answer is 9419919379773971911373313179.
Edit: slightly more concise -- appropriate sorting returns the largest number first. Note the reversal shouldn't count against the computation time, if I were less lazy I'd just store the list in that format to begin with...
edit: slightly faster (now <800ms on my thinkpad edge)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class primefinder {
public static void getNextPrime(Integer p, Set<Integer> list,
List<Integer> best) {
for (Integer pr : links.get(p)) {
if (list.contains(pr)) {
continue;
}
list.add(pr);
getNextPrime(pr, list, best);
list.remove(pr);
}
if (list.size() > best.size()) {
best.clear();
best.addAll(list);
}
}
public static void main(String[] args) {
Collections.reverse(primes);
long start = System.currentTimeMillis();
links = new LinkedHashMap<Integer,List<Integer>>();
for(Integer p : primes){
int last2 = p % 100;
List<Integer> valid = new ArrayList<Integer>();
links.put(p, valid);
for(Integer q : primes){
if (q / 10 == last2) {
valid.add(q);
}
}
}
List<Integer> best = new ArrayList<Integer>();
Set<Integer> temp = new LinkedHashSet<Integer>();
for (Integer p : primes) {
temp.add(p);
getNextPrime(p, temp, best);
temp.clear();
}
System.out.println("Time: " + (System.currentTimeMillis() - start));
// print stuff
System.out.printf("%03d", best.get(0));
for (int i = 1; i < best.size(); i++) {
System.out.print((best.get(i) % 10));
}
System.out.print("\n");
}
static Map<Integer,List<Integer>> links;
static List<Integer> primes = Arrays.asList(11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107,
109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179,
181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331,
337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487,
491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577,
587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653,
659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743,
751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,
839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929,
937, 941, 947, 953, 967, 971, 977, 983, 991, 997);
}