For $n=\{{6,7,8}\}$, it take about $\{{1.43,\;19.69,\;860.85}\}$ seconds.
When $n=9$, it doesn't finished for $4$ hours, still very slow, I terminate it.
Still very slow, I tried to convert all the patterns to C code, it's not difficult, the generated C code is more than 5,700 lines, the efficiency improvement is very obvious.
n=9; gps=Block[{i=1,j=1},Groupings[Table[x,n],f->2]/. {f:>(F[#,Symbol["i"<>ToString@Mod[i++,n-1,1]],#2]&),x:>Symbol["n"<>ToString[Mod[j++,n,1]]]}]; gen=StringTemplate["if(check1(``)){ sprintf(buffer, \"``\\n\", ``); if(check2(buffer)) printf(\"%s\", buffer); }"][ToString@CForm@#, StringReplace[ToString@#,{"F"|", "->"","["->"(","]"->")", "n"~~DigitCharacter:>"%d","i"~~DigitCharacter:>"%c"}], StringReplace[StringRiffle[#//.F[x___]:>{x}//Flatten,","],"i"->"o"] ]&/@gps//StringRiffle[#,"\n"]&; src="#include <stdio.h> #include <math.h> #include <string.h> #include <time.h> #define NUM 100 #define N 6 #define EPS 1e-8 char ops[N] = {'+', '-', '*', '/', '#', '@'}; char buffer[128]; double F(double x, int op, double y) { double arr[] = {x + y, x - y, x * y, x / y, 10 * x + y, -x + y}; return arr[op]; } int check1(double x) { return fabs(x - NUM) < EPS || fabs(x + NUM) < EPS; } int check2(char buffer[]) { return (!strstr(buffer, \"#(\") && !strstr(buffer, \")#\")); } void calc(int a[]) { int len = 0; int n1 = a[0], n2 = a[1], n3 = a[2], n4 = a[3], n5 = a[4], n6 = a[5], n7 = a[6], n8 = a[7], n9 = a[8]; #pragma omp parallel for schedule(dynamic) reduction(+:buffer) for (int i1 = 0; i1 < N; i1++) { for (int i2 = 0; i2 < N; i2++) for (int i3 = 0; i3 < N; i3++) for (int i4 = 0; i4 < N; i4++) for (int i5 = 0; i5 < N; i5++) for (int i6 = 0; i6 < N; i6++) for (int i7 = 0; i7 < N; i7++) for (int i8 = 0; i8 < N; i8++) { char o1 = ops[i1], o2 = ops[i2], o3 = ops[i3], o4 = ops[i4], o5 = ops[i5], o6 = ops[i6], o7 = ops[i7], o8 = ops[i8]; `` } } } int main() { clock_t t0 = clock(); freopen(\"output.txt\", \"w\", stdout); int a[] = {1,2,3,4,5,6,7,8,9}; calc(a); printf(\"Elapsed time: %g sec\\n\", (clock() - t0) / (double) CLOCKS_PER_SEC); return 0; } "; Export["main.c",TemplateApply@StringTemplate[src,gen],"Text"] Run["gcc -Og main.c -fopenmp"] Run["a.exe"] // AbsoluteTiming list=ReadList["output.txt","String"] list // Most // Length LeftTeeArrow[x_,y_]:=-x+y; ans=ToExpression[StringReplace[Most@list,{"#"->"","@"->"~LeftTeeArrow~"}],InputForm,HoldForm] ReleaseHold[ans]//Union 
