Problem Description: The n integers from 1 to n are surrounded by a circle, and if any of the 2 adjacent numbers are added,
The result is a prime number, then this ring becomes the prime circle.
n=20, the following sequence is a prime ring:
1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 20 11 12 19 18
English name: Prime Ring problem
Problem Solving Analysis:
For such a question, my idea is to first determine whether each number is a prime,
Then continue to determine how the number of adjacent two and is the prime.
Code:
#include <iostream>
#include <cstdio>
#include <cmath>
#define MAXN 20
using namespace Std;
int RING[MAXN], B[MAXN];
int isprime (int n)
{
int T, F = 1;
t = sqrt (n);
for (int i = 2; I <= t; i++)
if (n% i = = 0)
{
f = 0;
Break
}
return F;
}
int primering (int ring[], int b[], int n)
{
if (n = = MAXN)
Return IsPrime (Ring[n-1] + ring[0]);
printf ("\ncalculating ring[%d] =", n);
for (int i = 1; i < MAXN; i++)
{
if (b[i] = = 0 && isprime ((i + 1) + ring[n-1])
{
B[i] = 1;
Ring[n] = i + 1;
printf ("%d", ring[n]);
if (Primering (ring, B, n + 1))
return 1;
Else
B[i] = 0;
}
}
return 0;
}
int main ()
{
Ring[0] = 1;
B[0] = 1;
if (Primering (ring, B, 1))
{
printf ("\n\nthe prime Ring is:");
for (int i = 0; i < MAXN; i++)
printf ("%d", ring[i]);
printf ("\ n");
}
Else
printf ("\n\nnot found!\n");
return 0;
}
Prime Ring--C + + implementation