#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// quick sieve primes below n
int sieve(int n,int**p,int*l){
if(n<2) return -1;
else if(n==2){
*l=1;
*p
=(int*)malloc(*l
*sizeof(int)); (*p)[0]=2;
return 0;
}
int tmpl=(n+1-3+1)/2;
int *s
=(int*)malloc(tmpl
*sizeof(int)); int i=0,m=3,j,h=(n+1)/2-1;
for(;i<tmpl;i++) s[i]=3+2*i;
i=0;
while(m<=mr){
if(s[i]){
j=(m*m-3)/2;
s[j]=0;
while(j<h){
s[j]=0;
j+=m;
}
}
i++;
m=2*i+3;
}
h=1;
for(i=0;i<tmpl;i++) if(s[i]) h++;
*p
=(int*)malloc(h
*sizeof(int)); (*p)[0]=2;
h=1;
for(i=0;i<tmpl;i++)
if(s[i]) (*p)[h++]=s[i];
*l=h;
return 0;
}
// test for primality
int ispr(int n){
if(n%2==0) return 0;
int d=3;
while(d<m){
if(n%d==0)return 0;
d+=2;
}
return 1;
}
int digits(int n){
}
int pow_10[]={1,10,100,1000,10000};
// test if n can form prime with numbers from l
int test(int*l,int ll,int n){
int i=0,y,yd,nd=digits(n);
for(;i<ll;i++){
y=l[i];
yd=digits(y);
if(!(ispr(y*pow_10[nd]+n)&&ispr(n*pow_10[yd]+y)))
return 0;
}
return 1;
}
int main() {
int *pr=NULL,N=0;
sieve(10000,&pr,&N);
#define K 5
int l[K];
int c0,c1,c2,c3,c4;
for(c0=0;c0<N-K+1;c0++){
l[0]=pr[c0];
for(c1=c0+1;c1<N-K+2;c1++){
if(test(l,1,pr[c1])){
l[1]=pr[c1];
for(c2=c1+1;c2<N-K+3;c2++){
if(test(l,2,pr[c2])){
l[2]=pr[c2];
for(c3=c2+1;c3<N-K+4;c3++){
if(test(l,3,pr[c3])){
l[3]=pr[c3];
for(c4=c3+1;c4<N-K+5;c4++){
if(test(l,4,pr[c4])){
l[4]=pr[c4];
printf("%d, %d, %d, %d, %d (%d)\n", l[0],l[1],l[2],l[3],l[4],l[0]+l[1]+l[2]+l[3]+l[4]);
goto EXIT;
}
}
}
}
}
}
}
}
}
EXIT:
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hdGguaD4KCi8vIHF1aWNrIHNpZXZlIHByaW1lcyBiZWxvdyBuCmludCBzaWV2ZShpbnQgbixpbnQqKnAsaW50KmwpewogaWYobjwyKSByZXR1cm4gLTE7CiBlbHNlIGlmKG49PTIpewogICpsPTE7CiAgKnA9KGludCopbWFsbG9jKCpsKnNpemVvZihpbnQpKTsKICAoKnApWzBdPTI7CiAgcmV0dXJuIDA7CiB9CiBpbnQgdG1wbD0obisxLTMrMSkvMjsKIGludCAqcz0oaW50KiltYWxsb2ModG1wbCpzaXplb2YoaW50KSk7CiBkb3VibGUgbXI9c3FydChuKTsKIGludCBpPTAsbT0zLGosaD0obisxKS8yLTE7CiBmb3IoO2k8dG1wbDtpKyspIHNbaV09MysyKmk7CiBpPTA7CiB3aGlsZShtPD1tcil7CiAgaWYoc1tpXSl7CiAgIGo9KG0qbS0zKS8yOwogICBzW2pdPTA7CiAgIHdoaWxlKGo8aCl7CiAgICBzW2pdPTA7CiAgICBqKz1tOwogICB9CiAgfQogIGkrKzsKICBtPTIqaSszOwogfQogaD0xOwogZm9yKGk9MDtpPHRtcGw7aSsrKSBpZihzW2ldKSBoKys7CiAqcD0oaW50KiltYWxsb2MoaCpzaXplb2YoaW50KSk7CiAoKnApWzBdPTI7CiBoPTE7CiBmb3IoaT0wO2k8dG1wbDtpKyspCiAgaWYoc1tpXSkgKCpwKVtoKytdPXNbaV07CiBmcmVlKHMpOwogKmw9aDsKIHJldHVybiAwOwp9CgovLyB0ZXN0IGZvciBwcmltYWxpdHkKaW50IGlzcHIoaW50IG4pewogZG91YmxlIG09MStzcXJ0KG4pOwogaWYobiUyPT0wKSByZXR1cm4gMDsKIGludCBkPTM7CiB3aGlsZShkPG0pewogIGlmKG4lZD09MClyZXR1cm4gMDsKICBkKz0yOwogfQogcmV0dXJuIDE7Cn0KCmludCBkaWdpdHMoaW50IG4pewogcmV0dXJuIChpbnQpKDErZmxvb3IobG9nKG4pL2xvZygxMCkpKTsKfQogCmludCBwb3dfMTBbXT17MSwxMCwxMDAsMTAwMCwxMDAwMH07CgovLyB0ZXN0IGlmIG4gY2FuIGZvcm0gcHJpbWUgd2l0aCBudW1iZXJzIGZyb20gbAppbnQgdGVzdChpbnQqbCxpbnQgbGwsaW50IG4pewogaW50IGk9MCx5LHlkLG5kPWRpZ2l0cyhuKTsKIGZvcig7aTxsbDtpKyspewogIHk9bFtpXTsKICB5ZD1kaWdpdHMoeSk7CiAgaWYoIShpc3ByKHkqcG93XzEwW25kXStuKSYmaXNwcihuKnBvd18xMFt5ZF0reSkpKQogICByZXR1cm4gMDsKIH0KIHJldHVybiAxOwp9CgppbnQgbWFpbigpIHsKIGludCAqcHI9TlVMTCxOPTA7CiBzaWV2ZSgxMDAwMCwmcHIsJk4pOwojZGVmaW5lIEsgNQogaW50IGxbS107CiBpbnQgYzAsYzEsYzIsYzMsYzQ7CgogZm9yKGMwPTA7YzA8Ti1LKzE7YzArKyl7CiAgbFswXT1wcltjMF07CiAgZm9yKGMxPWMwKzE7YzE8Ti1LKzI7YzErKyl7CiAgIGlmKHRlc3QobCwxLHByW2MxXSkpewogICAgbFsxXT1wcltjMV07CiAgICBmb3IoYzI9YzErMTtjMjxOLUsrMztjMisrKXsKICAgICBpZih0ZXN0KGwsMixwcltjMl0pKXsKICAgICAgbFsyXT1wcltjMl07CiAgICAgIGZvcihjMz1jMisxO2MzPE4tSys0O2MzKyspewogICAgICAgaWYodGVzdChsLDMscHJbYzNdKSl7CiAgICAgICAgbFszXT1wcltjM107CiAgICAgICAgZm9yKGM0PWMzKzE7YzQ8Ti1LKzU7YzQrKyl7CiAgICAgICAgIGlmKHRlc3QobCw0LHByW2M0XSkpewogICAgICAgICAgbFs0XT1wcltjNF07CiAgICAgICAgICBwcmludGYoIiVkLCAlZCwgJWQsICVkLCAlZCAoJWQpXG4iLAogICAgICAgICAgIGxbMF0sbFsxXSxsWzJdLGxbM10sbFs0XSxsWzBdK2xbMV0rbFsyXStsWzNdK2xbNF0pOwogICAgICAgICAgZ290byBFWElUOwogICAgICAgICB9CiAgICAgICAgfQogICAgICAgfQogICAgICB9CiAgICAgfQogICAgfQogICB9CiAgfQogfQoKRVhJVDoKIGZyZWUocHIpOwogcmV0dXJuIDA7Cn0K