还不是很懂,mark,,,,,
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Mat
{
bool num[101][101];
};
Mat init, unit;
int m, n;
Mat Mul(Mat a, Mat b)
{
Mat c;
for(int i = 0 ; i < n; i ++)
{
for(int j = 0; j < n; j ++)
{
c.num[i][j] = 0;
for(int k = 0; k < n ; k ++)
{
c.num[i][j] ^= a.num[i][k] & b.num[k][j];
}
// c.num[i][j] %= 2;
}
}
return c;
}
int main()
{
int i, j;
char str[101];
Mat p, q;
for (i = 0; i < 101; i++)
for (j = 0; j < 101; j++)
{
if (i == j)
{
init.num[i][j] = unit.num[i][j] = 1;
continue;
}
init.num[i][j] = ((i + 1) == j);
}
while (scanf("%d", &m) == 1)
{
scanf("%s", str);
n = strlen(str);
init.num[n-1][0] = 1;
Mat p, q;
q = unit;
p = init;
while(m)
{
if(m & 1) q = Mul(q, p);
m >>= 1;
p = Mul(p, p);
}
for (i = 0; i < n; i++)
{
int ans = 0;
for (j = 0; j < n; j++)
ans ^= str[j] * q.num[j][i];
printf("%d", ans);
}
puts("");
init.num[n-1][0] = 0;
}
return 0;
}