编写程序实现线性移位寄存器
【问题描述】
输入:
(1)GF(2)上的线性移位寄存器的阶数n小于等于10,
(2)反馈函数f(x1,x2,...xn)=C1X1+C2X2+...+CnXn的系数c1,C2,…,Cn
(3)初始状态S0=(a0,a1,...,an-1)中的a0,a1,...,an-1
输出:周期p,以及输出序列
【输入形式】
输入为3行:
第1行:线性移位寄存器的阶数n
第2行:反馈函数的系数
第3行;初始状态
【输出形式】
输出为2行:
第1行:为周期p;
第2行:输出序列(输出n+p位)。
【样例输入】
5
10010
10011
样例输出
31
10011010010000101011101100011111011
代码:
#include<iostream>
using namespace std;
int main(void)
{
int n;
cin>>n;
char x[n],c[n];
int f[n],s[n];
cin>>x>>c;
for(int i=0;i<n;i++)
{
if(x[i]=='0')f[i]=0;
else f[i]=1;
}
for(int i=0;i<n;i++)
{
if(c[i]=='0')s[i]=0;
else s[i]=1;
}
int M[10000]={0};
for(int i=0;i<n;i++)
{
M[i]=s[i];
}
int j=0;
for(int i=n;i<10000;i++)
{
int sum=0;
for(int k=0;k<n;k++)
{
sum=M[i-1-k]*f[n-k-1]+sum; //计算下一项的和
}
M[i]=sum%2;
j++;
int c=0;
for(c=0;c<n;c++)
{
if(M[i-c]!=M[n-c-1]) //判断是否形成周期
break;
}
if(c==n)
break;
}
cout<<j<<endl;
for(int i=0;i<n+j;i++)
{
cout<<M[i];
}
return 0;
}