uptoqdigits(n) = { my(res = List()); for(i = 2, n, print(i); forvec(x = vector(i, j, [1,9]), c = fromdigits(x); if(isforuptoqdigits(c), listput(res, c); print(); print(res); print(); ) , 1 ) ); reps = vector(n, i, 10^i\9); res = setminus(Set(res), reps); res } isforuptoqdigits(n) = { if(!isprime(n), return(0)); my(d = digits(n), t = 0, v, fr, cfr, c); /* not needed if candidates come from uptoqdigits above if(vecsort(d) != d, return(0)); s = Set(d) if(#s == 1, return(0)); if(s[1] == 0, return(0)); */ fr = vector(9); for(i = 1, #d, fr[d[i]]++ ); prindices = [1,3,7,9]; for(i = 1, 4, if(fr[prindices[i]] > 0, ld = prindices[i]; cfr = fr; cfr[ld]--; v = vector(#d-1); t = 0; for(j = 1, 9, for(k = 1, cfr[j], t++; v[t] = j ) ); forperm(v, p, p = Vec(p); c = 10*fromdigits(p) + ld; if(isprime(c) && c != n, return(0) ) ); ) ); 1 }