The primes 3, 7, 109, and 673, are quite remarkable. By taking any two primes and concatenating them in any order the result will always be prime. For example, taking 7 and 109, both 7109 and 1097 are prime. The sum of these four primes, 792, represents the lowest sum for a set of four primes with this property.
Find the lowest sum for a set of five primes for which any two primes concatenate to produce another prime.
#define N 10000
#define M 10
bool isPrime(int x);
bool primecon(int n,int m);
bool isPrime(int x)
{
int n = sqrt(x);
if (x == 2 || x == 3)
{
return true;
}
for ( int i = 2; i <=n; i++)
{
if (x%i == 0)
{
return false;
}
}
return true;
}
bool primecon(int n,int m)
{
char tn[M],tm[M],temp[M];
sprintf(tn,"%d",n);
sprintf(tm,"%d",m);
strcpy(temp,tn);
strcat(tn,tm);
strcat(tm,temp);
int ni = atoi(tn),mi = atoi(tm);
if (isPrime(ni) == true && isPrime(mi) == true)
{
return true;
}
return false;
}
int main()
{
clock_t ts,te;
ts=clock();
int answer = 0;
for (int i1 = 2; i1 < N; i1++)
{
if (isPrime(i1) == true)
{
for (int i2 = i1+1; i2 < N; i2++)
{
if (isPrime(i2) == true && primecon(i1,i2) == true)
{
for (int i3 = i2+1; i3 < N; i3++)
{
if (isPrime(i3) == true && primecon(i1,i3) == true&& primecon(i2,i3) == true)
{
for (int i4 = i3+1; i4 < N; i4++)
{
if (isPrime(i4) == true&& primecon(i1,i4) == true&& primecon(i2,i4) == true&& primecon(i3,i4) == true)
{
for (int i5 = i4+1; i5 < N; i5++)
{
if (isPrime(i5) == true&& primecon(i1,i5) == true&& primecon(i2,i5) == true&& primecon(i3,i5) == true&& primecon(i4,i5) == true&& primecon(i4,i5) == true)
{
answer = i1+i2+i3+i4+i5;
printf("%d,%d,%d,%d,%d\n",i1,i2,i3,i4,i5);
printf("\nanswer %d",answer);
te=clock();
printf("\ntime difference: %ds\n",(te-ts)/CLOCKS_PER_SEC);
getchar();
return 0;
}
}
}
}
}
}
}
}
}
}
}