Cuadros Mágico de Primos


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