Código
#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char clave[30]=""; unsigned char *subc; int i,j,n,k,l,m,salto; long numero; unsigned long long semilla; semilla ^= semilla; l ^= l; for(i=0;i<n;i++) semilla += (long long)clave[i]; semilla <<= 1; semilla++; for(m=0;m<n;m++) { for(i=0;i<n;i++) { for(j=0;j<clave[i];j++) { semilla *= semilla; semilla %= 2147483629; semilla *= 16811; semilla %= 2147483629; } numero = (long) semilla; // printf("%12u %08X\n",numero,numero); salto ^= salto; for(k=7;k>=0;k--) { if(!clave[i]&1<<k) salto++; subc[l] <<=1; if(numero & 1<<(k+23-salto)) subc[l]++; } l++; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) //printf("\n"); } for(i=0;i<(n*n-1);i++) subc[i] ^= subc[i+1]; for(i=0;i<(n*n-1);i++) for(i=0;i<(n*n-2);i++) subc[i] ^= subc[i+1]; for(i=0;i<(n*n-2);i++) for(i=0;i<(n*n-3);i++) subc[i] ^= subc[i+1]; for(i=0;i<(n*n-3);i++) }
esta es una version algo primitiva pero hace precisamente lo que dije