Advertisement
Guest User

a.c

a guest
Dec 3rd, 2014
712
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct Xs {
  5.     int x[32];
  6.     int y[32];
  7. };
  8.  
  9. void print(int n, struct Xs *pX)
  10. {
  11.     int i, len;
  12.     char *p, buf[4096];
  13.  
  14.     len = sprintf(buf, "x%d = ", n);
  15.     p = buf + len;
  16.     for (i = 0; i < 32; i++)
  17.     {
  18.         if (pX->y[i])
  19.         {
  20.             len = sprintf(p, "y%d ^ ", i);
  21.             p += len;
  22.         }
  23.     }
  24.     for (i = 0; i < 32; i++)
  25.     {
  26.         if (pX->x[i])
  27.         {
  28.             len = sprintf(p, "x%d ^ ", i);
  29.             p += len;
  30.         }
  31.     }
  32.     *(p-3) = '\0';
  33.     puts(buf);
  34. }
  35.  
  36. int main()
  37. {
  38.     int i, j, k, flag;
  39.     struct Xs X[32];
  40.  
  41.     memset(X, 0, sizeof(X));
  42.     for (i = 0; i < 32; i++)
  43.     {
  44.         X[i].y[i] = 1;
  45.         j = (i + 8) % 32;
  46.         k = (i + 7) % 32;
  47.         X[i].x[j] = 1;
  48.         X[i].x[k] = 1;
  49.     }
  50.     while (1)
  51.     {
  52.         flag = 0;
  53.         for (i = 0; i < 32; i++)
  54.         {
  55.             for (j = 0; j < 32; j++)
  56.             {
  57.                 if (j == i)
  58.                     continue;
  59.                 if (X[i].x[j])
  60.                 {
  61.                     flag = 1;
  62.                     X[i].x[j] = 0;
  63.                     for (k = 0; k < 32; k++)
  64.                     {
  65.                         if (X[j].y[k])
  66.                             X[i].y[k] ^= X[j].y[k];
  67.                     }
  68.                     for (k = 0; k < 32; k++)
  69.                     {
  70.                         if (X[j].x[k])
  71.                             X[i].x[k] ^= X[j].x[k];
  72.                     }
  73. //                  print(i, &X[i]);
  74.                 }
  75.             }
  76.         }
  77.         if (flag == 0)
  78.             break;
  79.     }
  80.  
  81.     printf("---\n");
  82.     for (i = 0; i < 32; i++)
  83.         print(i, &X[i]);
  84.     printf("---\n");
  85.  
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement