可读性可能不那么好,代码需要 1.1秒钟. 局部地方有重复逻辑,是可以进一步优化速度的,比较懒,暂时先这样吧.
- pool = Table[{i,Select[FromDigits /@ Permutations[Range[9], {i}], PrimeQ]}, {i, 1,8}];
- ans = GroupBy[
- Flatten[Table[
- Union[Sort /@
- Lookup[NestWhile[
- GroupBy[Join[Lookup[#, True, {}],
- Flatten[Table[
- Flatten[Table[{Flatten[{p[[1]], t}],
- Complement[p[[2]],
- Flatten[IntegerDigits /@ {p[[1]], t}]]}, {len,
- Flatten[{Range[IntegerLength[p[[1, -1]]],
- Length[p[[2]]]/2], Length[p[[2]]]}]}, {t,
- Select[FromDigits /@
- Permutations[
- Complement[p[[2]],
- Flatten[IntegerDigits /@ {p[[1]], t}]], {len}],
- PrimeQ]}], 1], {p, Lookup[#, False, {}]}],
- 1]], #[[2]] == {} &] &,
- GroupBy[Table[{{i}, Complement[Range[9], IntegerDigits[i]]}, {i, pool[[m, 2]]}], #[[2]] == {} &],
- Lookup[#, False, {}] != {} &], True, {}][[All, 1]]], {m, 1, 4}], 1], Map[IntegerLength, #] &];
- Length /@ ans
复制代码
- {{{1,8},11483},{{1,1,7},2052},{{1,2,6},2482},{{1,3,5},2049},{{1,4,4},942},{{1,1,1,6},205},{{1,1,2,5},646},{{1,1,3,4},449},{{1,2,2,4},410},{{1,2,3,3},292},{{1,1,1,1,5},13},{{1,1,1,2,4},54},{{1,1,1,3,3},20},{{1,1,2,2,3},82},{{1,2,2,2,2},8},{{1,1,1,1,2,3},2},{{1,1,1,2,2,2},3},{{2,7},8844},{{2,2,5},535},{{2,3,4},945},{{2,2,2,3},32},{{3,6},6572},{{3,3,3},136},{{4,5},6424}}
复制代码 |