DEFINICIÓN
PRIMO:Número primo Número entero que solamente es divisible por él mismo (positivo y negativo) y por la unidad (positiva y negativa).
CUADRADO MÁGICO:Un cuadrado mágico es una tabla de grado primario donde se dispone de una serie de números enteros en un cuadrado o matriz de forma tal que la suma de los números por columnas, filas y diagonales principales sea la misma. Usualmente los números empleados para rellenar las casillas son consecutivos, de 1 a n², siendo n el número de columnas y filas del cuadrado mágico.
Aquí puedes calcular Matrices Mágicas con números Primos, Selecciona la Matriz
Codigo Fuente en C++
#include <iostream>
#include<cstdlib>
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
using namespace std;
int mat[20][20];
int c,p,k,s,i,j,dim;
//int matriz 14 es prueba
#define n 3
#define MATRIX 5// LA ENTRADA QUE QUIERES
#define OPCIONES 11
int magico6[100]={0,13,839,1931,2879,61,199,1039,1091,479,797,1663,853,1693,1889,467,599,283,991,2083,281,677,809,43,2029,31,1721,887,389,2293,601,1063,101,1481,449,1579,1249};
int magico5a[100]={0,691,607,211, 1181, 1489,787, 1039, 271, 1321, 761,1831, 1741, 17, 349, 241 ,269 ,751,1801,1051,307,601,41,1879,277,1381};
int magico5[100]={0,691 ,607, 211, 1181, 1471,787, 1021, 271, 1321, 761,1831, 1741, 17, 331, 241,251, 751, 1801, 1051,307,601,41,1861,277,1381};
int prueba[100]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36};
int magico4[100]={0,43,89,5,167,179,41,53,31,71,73,137,23,11,101,109,83,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int magico4a[100]={0,3,107,5,131,109,311,7,331,193,11,83,41,103,53,71,89,151,199,113,61,97,167,31,367,13,173,59,17,37,73,101,127,179,139,47};
int magico4b[100]={0,13,109,107,41,101,47,43,79,53,83,97,37,103,31,23,113,0,0,0,0,0,0,367,13,173,59,17,37,73,101,127,179,139,47};
int magico4c[100]={0,7,487,101,287,461,41,307,67,311,191,337,37,97,151,71,131,491,0,0,0,0,0,0,0,0};
int magico3[100]={0,1093,163,673,223,643,1063,613,1123,193};
int magico3a[100]={0,181,7,139,67,109,151,79,211,37,0};
int magico3b[100]={0,1999,7,1021,31,1009,1987,997,2011,19};
int magico3c[100]={0,577,7,337,67,307,547,227,607,37};
int magico3d[100]={0,1999,7,1021,31,1009,1987,997,2011,19};
int magico3e[100]={0,2069,419,1289,479,1259,2039,1229,2099,449};
int magico3f[100]={0,491,41,311,101,281,461,251,521,71};
int origen[100]={0,0,107,5,131,109,311,7,331,193,11,83,41,103,53,71,89,151,199,113,61,97,167,31,367,13,173,59,17,37,73,101,127,179,139,47};
void dimencionar()
{
// cout<<"\n";
int dim,cu;
dim=n*n;
cu=0;
for (i=1; i<=dim; i++)
{
if (cu==(dim/n)){
cout<<"\n";
cu=0;
}
if (n==3)
{
origen[i]=magico3[i];
}
if (n==4)
{
origen[i]=magico4[i];
}
if (n==5)
{
origen[i]=magico5[i];
}
if (n==6)
{
origen[i]=magico6[i];
//origen[i]=prueba[i];
}
cout<<"\t"<<origen[i];
cu=cu+1;
}
//cout<<"\n";
}
void original()
{
int dim,cu;
dim=n*n;
cu=0;
//cout<<"\n";
for (i=0; i<dim; i++)
{
if (cu==(dim/n)){
//cout<<"\n";
cu=0;
}
//cout<<"\t"<<origen[i];
cu=cu+1;
}
//cout<<"\n";
}
void imprimir()
{
cout<<"\n";
string cad [30][30] = {{"?"}, {"?"}, {"?"}, {"?"},{"?"},{"?"},{"?"}, {"?"}, {"?"},{"?"},{"?"},{"?"},{"?"},{"?"}};
int primos[100],k;
k=0;
for (i=0; i<=n-1;i++)
{
for (j=0;j<=n-1;j++)
{
cout<<"\t"<<mat[i][j];
int divisor = 1, divisores = 0, num = 0;
k=k+1;
num=mat[i][j];
do{
if(num % divisor == 0){
divisores++;
}
divisor++;
}while(divisor <= num);
if(divisores == 2){
//cout<<"*";
primos[k]=num;
}else{
cout<<"";
}
}
cout<<"\n";
}
//Calcula si es matriz magica
int sc;
cout<<"_______________________________________________________________Solucion:\n";
sc=0;
j=0;
cout<<"Columna:"<<j+1;
for (i=0; i<n; i++)
{
sc=sc+mat[i][j];
cout<<"\t"<<mat[i][j];
}
cout<<" Suma es:"<<sc;
int sf;
cout<<"\n";
i=0;
sf=0;
cout<<"Fila:"<<i+1<<"\t";
for (j=0; j<n; j++)
{
sf=sf+mat[i][j];
cout<<"\t"<<mat[0][j];
}
cout<<" Suma es: "<<sf;
int sd1,sd2;
sd1=0;
sd2=0;
//cout<<"\nDiagonal 1";
cout<<"\nDiagonal 1: "<<"\t"<<mat[0][0]<<"\t"<<mat[1][1]<<"\t"<<mat[2][2]<<"\t"<<mat[3][3]<<"\t"<<mat[4][4]<<"\t"<<mat[5][5];
for (i=0;i<=n;i++)
{
for(j=i;j<=i;j++)
sd1=sd1+mat[i][j];
}
cout<<" Suma es de:"<<sd1;
//cout<<"\nDiagonal 2";
cout<<"\nDiagonal 2:"<<"\t"<<mat[0][5]<<"\t"<<mat[1][4]<<"\t"<<mat[2][3]<<"\t"<<mat[3][2]<<"\t"<<mat[4][1]<<"\t"<<mat[5][0];
for (j=n;j>=0;j--)
{
for(i=j;i==j;i--)
sd2=sd2+mat[i][j];
//cout<<"\t"<<mat[i][j];
}
cout<<" Suma es de:"<<sd2;
if (sc==sd2)
{
if (sd1==sc)
cout<<"\n\t\t\t ES UNA MATRIX MAGICA DE PRIMOS";
}
else{cout<<"\n\t\t Matrix de Numeros Primos";}
}
void entrada_1( ){ cout<<"\t\t\tPRIMO MAGICA Entrada N° 1 ";
cout<<"\n";
c=0;
s=0;
for (i=0; i<=n-1; i++)
{for (j=0; j<=n-1; j++){s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}
void entrada_2(){cout<<"\n\t\t ENTRADA N° (2) ";
cout<<"\n";
c=0;
s=0;
for (i=n-1; i>=0; i--)
{if (c==n){}
for (j=0; j<=n-1; j++)
{
s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}
void entrada_3(){ cout<<"\n\t\t ENTRADA N° (3) ";
cout<<"\n";
c=0;
s=0;
for (i=n-1; i>=0; i--){if (c==n){}
for (j=n-1; j>=0; j--){s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}
void entrada_4(){cout<<"\n\t\t ENTRADA N° (4) ";
cout<<"\n";
c=0;
s=-n;
for (j=n; j>=0; j--){if (c==n){
for (k=0; k<=n-1; k++)
{s=s+1;
mat[k][j]=origen[s];
c=c+1;}
c=c-n;}
if (c==0)
{for (i=0; i<=n-1; i++)
{s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}}
void entrada_5(){cout<<"\n\t\t\t ENTRADA N° (5) ";
cout<<"\n";
c=0;
s=0;
for (i=n-1; i>=0; i--)
{
for (j=n-1; j>=0; j--)
{
s=s+1;
mat[i][j]=origen[s];
c=c+1;
}}}
void entrada_6(){cout<<"\n\t\t ENTRADA N° (6) ";
cout<<"\n";
c=0;
s=0;
for (i=0; i<=n; i++){if (c==n){}
for (j=n-1; j>=0; j--)
{ s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}
void entrada_7(){ cout<<"\n\t\t ENTRADA N° (7) ";
//cout<<"\n";
c=0;
s=0;
for (j=n-1; j>=0; j--)
{
for (i=n-1; i>=0; i--)
{
s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}
void entrada_8(){cout<<"ENTRADA N° (8) ";
cout<<"\n";
c=0;
s=0;
for (j=0; j<=n-1; j++){if (c==n)
{for (k=0; k<=n-1; k++)
{s=s+1;
mat[k][j]=origen[s];
c=c+1;}
c=c-n;}
if (c==0){for (i=0; i<=n-1; i++){s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}}
void entrada_9(){cout<<"ENTRADA N° (9) ";
cout<<"\n";
c=0;
s=0;
for (j=0; j<=n; j++)
{if (c==n){}
for (i=n-1; i>=0; i--){s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}
void entrada_10()
{
cout<<"ENTRADA N° 10 ";
cout<<"\n";
//n=9;
c=0;
s=0;
dim=(n*n)-1;
i=0;
//cout<<"\nn="<<n;
for (k=0; k<=n; k++)
{
if (c==0)
{
for (j=0; j<=(n-1); j++)
{
s=s+1;
mat[i][j]=origen[s];
//cout<<"\t"<<mat[i][j];
c=c+1;
}
i=i+1;
}
if (c==(n))
{
//cout<<"\n";
//i=i+1;
for (j=n-1; j>=0;j--)
{
s=s+1;
mat[i][j]=origen[s];
//cout<<"\t"<<mat[i][j];
c=c-1;
}
//cout<<"\n";
i=i+1;
}
}
}
void entrada_11()
{
//Imprimir();
cout<<"ENTRADA N° (11) ";
cout<<"\n";
c=0;
s=0;
for (j=0; j<=n-1; j++)
{
//cout<<"\n"<<c;
if (c==n)
{
// k=k+1;
//k=i;
//cout<<"c="<<c<<"n"<<n<<"i"<<i<<"="<<mat[0][1];
for (k=n-1; k>=0; k--)
{
s=s+1;
mat[k][j]=origen[s];
c=c+1;
//cout<<"\t"<<mat[i][j];
}
c=c-n;
}
if (c==0)
{
for (i=0; i<=n-1; i++)
{
s=s+1;
mat[i][j]=origen[s];
c=c+1;
//cout<<"\t"<<mat[i][j];
}
}
}
}
void entrada_12( )
{
cout<<"ENTRADA N° 12 ";
cout<<"\n";
c=n;
s=0;
dim=(n*n)-1;
i=0;
k=0;
//cout<<"\nn="<<n;
for (k=0; k<=n; k++)
{
//cout<<"\nc="<<c;
if (c==n)
{
for (j=n-1; j>=0; j--)
{
s=s+1;
mat[i][j]=origen[s];
//cout<<"\t"<<mat[i][j];
c=c-1;
}
i=i+1;
}
if (c==0)
{
for (j=0; j<=n-1;j++)
{
s=s+1;
mat[i][j]=origen[s];
//cout<<"\t"<<mat[i][j];
c=c+1;
}
//cout<<"\n";
i=i+1;
}
}
}
void entrada_13( )
{
cout<<"ENTRADA N° 13 ";
cout<<"\n";
c=n;
s=-n;
dim=(n*n)-1;
i=0;
k=0;
j=n;
//cout<<"\nn="<<n;
for (k=0; k<=n; k++)
{
//cout<<"\nc="<<c;
if (c==n)
{
for (i=n-1; i>=0; i--)
{
s=s+1;
mat[i][j]=origen[s];
//cout<<"\t"<<mat[i][j];
c=c-1;
}
j=j-1;
}
if (c==0)
{
for (i=0; i<=n-1;i++)
{
s=s+1;
mat[i][j]=origen[s];
//cout<<"\t"<<mat[i][j];
c=c+1;
}
//cout<<"\n";
j=j-1;
}
}
}
void entrada_14(){cout<<"ENTRADA N° (14) ";
cout<<"\n";
c=0;
s=0;
for (j=n-1; j>=0; j--)
{if (c==n)
{for (k=n-1; k>=0; k--)
{
s=s+1;
mat[k][j]=origen[s];
c=c+1;
}
c=c-n;
}
if (c==0){for (i=0; i<=n-1; i++)
{
s=s+1;
mat[i][j]=origen[s];
c=c+1;}}}}
void entrada_15( ){cout<<"ENTRADA N° 15 ";
cout<<"\n";
c=n;
s=0;
dim=(n*n)-1;
i=0;
k=0;
for (k=0; k<=n; k++){if (c==n)
{for (i=n-1; i>=0; i--)
{s=s+1;
mat[i][j]=origen[s];
c=c-1;}
j=j+1;}
if (c==0)
{
for (i=0; i<=n-1;i++)
{ s=s+1;
mat[i][j]=origen[s];
c=c+1;
}
j=j+1;}}}
int main(void)
{
int X,F,nestor,C,Y,im;
int MAT[20][20];
/*
if (MATRIX==10){entrada_10();} if (OPCION==11){entrada_11();}if (OPCION==12){entrada_12();}
if (OPCION==13){entrada_13();}if (OPCION==14){entrada_14();}if (OPCION==15){entrada_15();}
*/
int OP;
do
{
cout<<"________________________________________________________\n";
cout<<" PRIMOS MAGICOS | COMPUESTOS MAGICOS...(N<=17)\n";
cout<<"1. Entrada 1 5.Entrada 5 | 11.Entrada 1 15. Entrada 5 \n";
cout<<"2. Entrada 2 6.Entrada 6 | 12.Entrada 2 16. Entrada 6 \n";
cout<<"3. Entrada 3 7.Entrada 7 | 13.Entrada 3 17. Entrada 7\n";
cout<<"4. Entrada 4 8.Entrada 8 | 14.Entrasa 4 18. Entrada 8\n";
cout<<" 9.Entrada 9 | \n";
OP=MATRIX;
cout<<"\tLa Opcion que escogiste es la "<<MATRIX;
cout<<"\n\t\t DIMENCION N= "<<n<<"\n";
//OP=0;
switch(OP)
{
case 1:{
original();
dimencionar();
if (MATRIX==1){entrada_1();}
imprimir();
OP=0;
break;}
case 2:{
original();
dimencionar();
if (MATRIX==2){entrada_2();}
imprimir();
OP=0;
break;}
case 3:{
original();
dimencionar();
if (MATRIX==3){entrada_3();}
imprimir();
OP=0;
break;}
case 4:{
original();
dimencionar();
if (MATRIX==4){entrada_4();}
imprimir();
OP=0;
break;}
case 5:{
original();
dimencionar();
if (MATRIX==5){entrada_5();}
imprimir();
OP=0;
break;}
case 6:{
original();
dimencionar();
if (MATRIX==6){entrada_6();}
imprimir();
OP=0;
break;}
case 7:{
original();
dimencionar();
if (MATRIX==7){entrada_7();}
imprimir();
OP=0;
break;}
case 8:{
original();
dimencionar();
if (MATRIX==8){entrada_8();}
imprimir();
OP=0;
break;}
case 9:{
original();
dimencionar();
if (MATRIX==9){entrada_9();}
imprimir();
OP=0;
break;}
case 10:{
original();
dimencionar();
if (MATRIX==10){entrada_10();}
imprimir();
OP=0;
OP=0;
break;}
case 11:{
nestor=n;
im=n%2;
if(im==1 && n<=19)
{ F=1;
C=(nestor+1)/2;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
F++;
}
else
{
F--;
C++;
if(F<1) F=nestor;
if(C>nestor) C=1;
}
}
cout<<" \n";
cout<<" CUADRO MAGICO # 1:\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<"\n";
}
}
else
cout<<"\n\nDigite la Dimencion menor a 19 n<=19 Gracias";
//cout<<"-------------------------------------------";
OP=0;
break;
}
case 12:{
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
F=(nestor+1)/2;
C=nestor;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
C--;
}
else
{
F--;
C++;
if(F<1) F=nestor;
if(C>nestor) C=1;
}
}
cout<<" CUADRO MAGICO # 2:\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
else
cout<<"\n\nDigite la Dimencion menor a 17 n<=17 Gracias";
OP=0;
break;
}
case 13:{
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
cout<<" \n";
F=(nestor+1)/2;
C=nestor;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
C--;
}
else
{
F++;
C++;
if(F>nestor) F=1;
if(C>nestor) C=1;
}
}
cout<<" CUADRO MAGICO # 3:\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
OP=0;
break;
}
case 14:{
cout<<" \n";
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
F=nestor;
C=(nestor+1)/2;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
F--;
}
else
{
F++;
C++;
if(F>nestor) F=1;
if(C>nestor) C=1;
}
}
cout<<" CUADRO MAGICO # 4:\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
OP=0;
break;
}
case 15:{
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
cout<<" \n\n";
F=nestor;
C=(nestor+1)/2;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
F--;
}
else
{
F++;
C--;
if(F>nestor) F=1;
if(C<1) C=nestor;
}
}
cout<<" CUADRO MAGICO # 5 :\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
OP=0;
break;
}
case 16:{
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
F=(nestor+1)/2;
C=1;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
C++;
}
else
{
F++;
C--;
if(F>nestor) F=1;
if(C<1) C=nestor;
}
}
cout<<" CUADRO MAGICO # 6 :\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
OP=0;
break;
}
case 17:{
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
cout<<" \n\n";
F=(nestor+1)/2;
C=1;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
C++;
}
else
{
F--;
C--;
if(F<1) F=nestor;
if(C<1) C=nestor;
}
}
cout<<" CUADRO MAGICO # 7 \n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
OP=0;
break;
}
case 18:{
cout<<" \n";
cout<<"digite dimension de la matriz:";
nestor=n;
im=n%2;
if(im==1 && n<=19)
{
cout<<" \n\n";
F=1;
C=(nestor+1)/2;
for(X=1;X<=nestor*nestor;X++)
{
MAT[F][C]=X;
if(X%nestor==0)
{
F++;
}
else
{
F--;
C--;
if(F<1) F=nestor;
if(C<1) C=nestor;
}
}
cout<<"CUADRO MAGICO # 8:\n";
for(X=1;X<=nestor;X++)
{
for(Y=1;Y<=nestor;Y++)
{
cout<<" "<<MAT[X][Y];
}
cout<<" \n";
}
}
OP=0;
// MATRIX=0;
break;
}
}
} while(OP!=0);
return 0;
}
No hay comentarios:
Publicar un comentario