¿Cómo encontrar el cuadrado mágico de un número primo? (lenguaje c)
1 2 11 12
4 9 8 5
7 10 3 14
6 13 16 15
1 2 11 12
4 9 8 5
13 10 3 14
6 7 16 15
1 2 11 12
4 15 8 5
7 16 3 14
6 13 10 9
1 2 11 12
4 15 8 5
13 16 3 14
6 7 10 9
1 2 11 12
10 3 8 5 p>
p>
7 16 15 14
6 13 4 9
1 2 11 12
10 3 8 5
13 16 15 14
6 7 4 9
1 2 11 12
10 9 8 5
7 4 3 14
6 13 16 15
1 2 11 12
10 9 8 5
7 4 15 14
6 13 16 3
1 2 11 12
10 9 8 5
13 4 3 14
6 7 16 15
1 2 11 12
10 9 8 5
13 4 15 14
6 7 16 3
... .........
#include
#include
# incluir < windows.h >
#define MAX_NUM 30
#define _PRINT_ 0
Resultado largo sin firmar[MAX_NUM * MAX_NUM], ResultNum, Usado[MAX_NUM * MAX_ NUM]={ 0};
bool PrimeTable[MAX_NUM * MAX_NUM * 2]={ false };
N largo sin firmar
void; CreatePrimeTable(void)
{
PrimeTable[0]=false
PrimeTable[1]=false; ]=verdadero;
PrimeTable[3]=verdadero
para(unsigned long j=5; j < ;= MAX_NUM * MAX_NUM * 2; j+=2)
{
PrimeTable[j]=true;
for(unsigned long i=3; i <= sqrt((double)j); i+=2)
{
if (j % i == 0)
{
PrimeTable[j]=false
<; p> descanso}
}
}
}
}
}
bool en línea IsPrim
e(n largo sin firmar)
{
return PrimeTable[n];
}
bool CheckIt(profundo largo sin firmar)
{
if(Profundo == 0)
{
devuelve verdadero
}
else if(Profundo < N)
{
return IsPrime(Resultado[Profundo] + Resultado[Profundo - 1]);
}
De lo contrario, if (Deep % N == 0)
{
Devuelve IsPrime(Resultado[Deep] + Resultado [Profundo - N]);
}
De lo contrario
{
Devuelve IsPrime(Resultado[Profundo] + Resultado[Profundo - 1]) &.
}
void go(unsigned long Deep)
{
if(Deep == QN)
{
p> ResultNum++;
#if (_PRINT_)
printf("¡Encuéntralo! No.%lu\n" , ResultNum);
for(unsigned long i=0; i < QN; i++)
{
printf("%lu\t", Resultado [i]);
if(i % N == N - 1)
{
printf("\n");
}
#if (_PRINT_)
printf("¡Encuéntralo!
}
#else
printf("\rFind:%lu", ResultNum);
#endif
}
else
{
for(unsigned long i=1; i <= QN; ++i)
{
if(!Used[i])
{
Resultado[Deep]=i
if(CheckIt(Deep))
{
Usado[i ]=1;
ir(Profundo + 1);
Usado[i]=0; p>
}
{
}
}
int main()
{
DWORD tim;
NumResultado=0;
printf("Entrada N. ");
Entrada N: ");
scanf("%lu", &N);
QN=N * N
tim=GetTickCount(); ();
go(0);
printf("\n\nN=%lu\n",
p);
rintf("Total=%lu\n" , ResultNum);
printf("Tiempo=%lu\n", GetTickCount() -
return 0; /p>
}
Respecto a preguntas adicionales:
Adyacente no incluye direcciones diagonales, ¿verdad? Adyacente no significa arriba y abajo, izquierda y derecha... simplemente agregue otro caso si incluye una barra. Pero llevará más tiempo usarlo