Skip to content

Instantly share code, notes, and snippets.

@Hermann-SW
Last active November 27, 2024 22:28
Show Gist options
  • Save Hermann-SW/bef5b46a62a443a0d143f55118f0c9b8 to your computer and use it in GitHub Desktop.
Save Hermann-SW/bef5b46a62a443a0d143f55118f0c9b8 to your computer and use it in GitHub Desktop.
\\ a b c d e
\\ l m n f o
\\ k p g u v
\\ j h x r y
\\ i q w t s
\\ps=[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 61, 71, 73, 79, 83, 101, 103, 107, 109, 113];
ps=[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 113];
used=Vec(0,25);
{
for(a=1,25,if(!used[a],
used[a]=1;
for(b=1,25,if(!used[b],
used[b]=1;
for(c=1,25,if(!used[c],
used[c]=1;
for(d=1,25,if(!used[d],
used[d]=1;
for(e=1,25,if(!used[e],
used[e]=1;
if(isprime(ps[a]+ps[b]+ps[c]+ps[d]+ps[e]),
for(f=1,25,if(!used[f],
used[f]=1;
for(g=1,25,if(!used[g],
used[g]=1;
for(h=1,25,if(!used[h],
used[h]=1;
for(i=1,25,if(!used[i],
used[i]=1;
if(isprime(ps[e]+ps[f]+ps[g]+ps[h]+ps[i]),
for(j=1,25,if(!used[j],
used[j]=1;
for(k=1,25,if(!used[k],
used[k]=1;
for(l=1,25,if(!used[l],
used[l]=1;
if(isprime(ps[i]+ps[j]+ps[k]+ps[l]+ps[a]),
for(m=1,25,if(!used[m],
used[m]=1;
for(n=1,25,if(!used[n],
used[n]=1;
for(o=1,25,if(!used[o],
used[o]=1;
if(isprime(ps[l]+ps[m]+ps[n]+ps[f]+ps[o]),
for(p=1,25,if(!used[p],
used[p]=1;
for(q=1,25,if(!used[q],
used[q]=1;
if(isprime(ps[b]+ps[m]+ps[p]+ps[h]+ps[q]),
for(r=1,25,if(!used[r],
used[r]=1;
for(s=1,25,if(!used[s],
used[s]=1;
if(isprime(ps[a]+ps[m]+ps[g]+ps[r]+ps[s]),
for(t=1,25,if(!used[t],
used[t]=1;
for(u=1,25,if(!used[u],
used[u]=1;
if(isprime(ps[t]+ps[r]+ps[u]+ps[f]+ps[d]),
for(v=1,25,if(!used[v],
used[v]=1;
if(isprime(ps[k]+ps[p]+ps[g]+ps[u]+ps[v]),
for(w=1,25,if(!used[w],
used[w]=1;
if(isprime(ps[i]+ps[q]+ps[w]+ps[t]+ps[s]),
for(x=1,25,if(!used[x],
used[x]=1;
if(isprime(ps[w]+ps[x]+ps[g]+ps[n]+ps[c]),
for(y=1,25,if(!used[y],
used[y]=1;
if(isprime(ps[j]+ps[h]+ps[x]+ps[r]+ps[y]),
if(isprime(ps[e]+ps[o]+ps[v]+ps[y]+ps[s]),
print("{[",ps[a],",",ps[b],",",ps[c],",",ps[d],",",ps[e],";");
print(ps[l],",",ps[m],",",ps[n],",",ps[f],",",ps[o],";");
print(ps[k],",",ps[p],",",ps[g],",",ps[u],",",ps[v],";");
print(ps[j],",",ps[h],",",ps[x],",",ps[r],",",ps[y],";");
print(ps[i],",",ps[q],",",ps[w],",",ps[t],",",ps[s],"];}");
quit
);
);
used[y]=0;
));
);
used[x]=0;
));
);
used[w]=0;
));
);
used[v]=0;
));
);
used[u]=0;
));
used[t]=0;
));
);
used[s]=0;
));
used[r]=0;
));
);
used[q]=0;
));
used[p]=0;
));
);
used[o]=0;
));
used[n]=0;
));
used[m]=0;
));
);
used[l]=0;
));
used[k]=0;
));
used[j]=0;
));
);
used[i]=0;
));
used[h]=0;
));
used[g]=0;
));
used[f]=0;
));
);
used[e]=0;
));
used[d]=0;
));
used[c]=0;
));
used[b]=0;
));
used[a]=0;
));
}
@Hermann-SW
Copy link
Author

Smallest total sum prime 5x5 square of distinct primes has sum 1171:
https://www.mersenneforum.org/node/1055343?p=1062055#post1062055

pi@raspberrypi5:~/PrimeSquares $ gp -q < sum25d.gp
205 primes
1163: 0
1171: 3
1181: 2
1187: 2
1193: 5
1201: 19
1213: 38
1217: 27
1223: 39
1229: 65
1231: 102
1237: 140
1249: 263
1259: 306
1277: 695
sum=1706
pi@raspberrypi5:~/PrimeSquares $ 

@Hermann-SW
Copy link
Author

These are the possible sets fo 25 distinct primes summing up to 1171:

pi@raspberrypi5:~/PrimeSquares $ gp -q < sum25e.gp
205 primes
1171
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 113]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 101, 109]
[3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 103, 107]
pi@raspberrypi5:~/PrimeSquares $ 
pi@raspberrypi5:~/PrimeSquares $ cat sum25e.gp 
min25=vecsum(primes(26))-2;
mx=1279-1;
P=Vecrev(primes([3,mx]));
print(#P," primes");

srch(s,v,i,n)={
  if(s<0,return);
  if(n==0,if(s==0,print(Vecrev(v));return));
  if(i>#P,return);   
  if(#P-i+1<n,return);
  if(vecsum(P[#P-n+1..#P])>s,return);
  srch(s-P[i],concat(v,[P[i]]),i+1,n-1);
  srch(s,v,i+1,n);
};

print(1171);
srch(1171,[],1,25);
pi@raspberrypi5:~/PrimeSquares $ 

@Hermann-SW
Copy link
Author

The 1st vector is used in above gist.
Minimal total sum that is a prime of 25 distinct primes is 1171.
Above gist computes a solution superfast:

pi@raspberrypi5:~/PrimeSquares $ time gp -q < sum25f.gp 
{[3,5,7,11,17;
67,41,43,13,47;
37,53,19,59,113;
31,23,71,61,97;
29,89,83,79,73];}

real	0m0.031s
user	0m0.028s
sys	0m0.004s
pi@raspberrypi5:~/PrimeSquares $ 

Validation:

pi@raspberrypi5:~/PrimeSquares $ cat > 1171.gp 
{[3,5,7,11,17;
67,41,43,13,47;
37,53,19,59,113;
31,23,71,61,97;
29,89,83,79,73];}
pi@raspberrypi5:~/PrimeSquares $ ps=1171.gp gp -q < validate.gp
1171.gp, sum: 1171, validated
pi@raspberrypi5:~/PrimeSquares $ 

@Hermann-SW
Copy link
Author

pi@raspberrypi5:~/PrimeSquares $ cat validate.gp 
assert(b)={if(!(b),error("assertion failed"));}
{
  ps=eval(readvec(getenv("ps"))[1]);
  print1(getenv("ps"),", ");

  s=#ps;
  assert(#ps~==s);

  foreach(ps,c,assert(#c==s));
  foreach(ps~,r,assert(#r==s));

  foreach(ps,c,assert(isprime(vecsum(c))));
  foreach(ps~,r,assert(isprime(vecsum(r))));

  assert(isprime(trace(ps)));
  assert(isprime(vecsum([ps[i,#ps+1-i]|i<-[1..#ps]])));

  S=[r|i<-[1..s];r<-ps[i,]];
  assert(#Set(S)==s^2);
  foreach(S,e,assert(isprime(e)));
  assert(isprime(vecsum(S)));

  print("sum: ",vecsum(S),", validated");
}
pi@raspberrypi5:~/PrimeSquares $ 

@Hermann-SW
Copy link
Author

pi@raspberrypi5:~/PrimeSquares $ gp -q < sum25d.gp
205 primes
1163: 0
1171: 3
1181: 2
1187: 2
1193: 5
1201: 19
1213: 38
1217: 27
1223: 39
1229: 65
1231: 102
1237: 140
1249: 263
1259: 306
1277: 695
sum=1706
pi@raspberrypi5:~/PrimeSquares $ 
pi@raspberrypi5:~/PrimeSquares $ cat sum25d.gp
min25=vecsum(primes(26))-2;
mx=1279-1;
P=Vecrev(primes([3,mx]));
print(#P," primes");
cnt=0;

srch(s,v,i,n)={
  if(s<0,return);
  if(n==0,if(s==0,cnt+=1;return));\\print(v);cnt+=1;return));
  if(i>#P,return);   
  if(#P-i+1<n,return);
  if(vecsum(P[#P-n+1..#P])>s,return);
  srch(s-P[i],concat(v,[P[i]]),i+1,n-1);
  srch(s,v,i+1,n);
};

{
  C=primes([min25,mx]);
  Sum=0;
  foreach(C,c,print1(c,": ");cnt=0;srch(c,[],1,25);print(cnt);Sum+=cnt);
  print("sum=",Sum);
}
pi@raspberrypi5:~/PrimeSquares $ 

@Hermann-SW
Copy link
Author

pi@raspberrypi5:~/PrimeSquares $ gp -q < sum25c.gp
205 primes
[1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277]
M[205,1163]=[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]

[1159, 1161, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275, 1277]
pi@raspberrypi5:~/PrimeSquares $ 
pi@raspberrypi5:~/PrimeSquares $ cat sum25c.gp 
{
  min25=vecsum(primes(26))-2;
  mx=1279-1;
  P=primes([5,mx]);
  print(#P+1," primes");
  M=matrix(1+#P,mx,y,x,Set());
  y=1;M[y,3]=Set([1]);
  foreach(P,p,
    y+=1;
    M[y,p]=Set([1]);
    for(x=1,mx,M[y,x]=setunion(M[y-1,x],M[y,x]));
    for(x=1,mx-p,M[y,x+p]=setunion(Set([e+1|e<-M[y-1,x]]),M[y,x+p]));
  );
  C=[x|x<-primes([min25,mx]),setsearch(M[y,x],25)];
  print(C);
  print("M[205,1163]=",M[y,1163]);
  print("\n",[x|x<-[1..mx],setsearch(M[y,x],25)]);
}
pi@raspberrypi5:~/PrimeSquares $ 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment