ei=N-1*i(modL)=4-1i(mod7)=2i(mod7),(0<i<N).所以N,L的逆为2.
#include<stdio.h>
#include<math.h>
#define L 15
#define N 4
gcd_NL()/*判断N,L是否互素*/
{
int l=L,n=N;
int temp,k;
if(L<N)
{
temp=l;
l=n;
n=temp;
}
while(n!=0)
{
k=l%n;
l=n;
n=k;
}
return l;
}
qiu_ni() /*求出并返回N的逆*/
{
int s,yy;
int num;
for(s=1;s<=N;s++)
{ yy=(s*N)%L;
if(yy==1)
{num=s;
printf("N的逆为:%d\n",num);}
}
return num;
}
main()
{
int a[L]; /*自相关序列*/
int H[N][N]; /*hadamard矩阵*/
int e[N]; /*移位序列*/
int i,j,m,t;
int b[N][L]; /*b为交织序列*/
int b1[L][N]; /*转置交织矩阵*/
int c[N][L][N]; /*zcz序列*/
int num;
int F; /*最大公约数*/
// printf("input int L and N\n");
// scanf("%d\n,%d\n",&L,&N);
// printf("请输入自相关序列a\n");
for(m=0;m<L;m++)
{
a[m]=m;
// scanf("%d,",&a[m]);
}
printf("\n");
printf("请输入N*N阶矩阵H[N][N]:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d,",&H[i][j]);
}
printf("\n");
}
printf("\n");
num=qiu_ni();
F=gcd_NL();
if(F==1) /*L,N互素时的移位序列*/
{
for(i=0;i<N;i++)
e[i]=(num*i)%L;
}
else if(L%N==0) /*L整除N时的移位序列*/
{
for(i=0;i<N;i++)
e[i]=((L/N)*i)%L;
}
else if(N%L==0) /*N整除L时的移位序列*/
{
for(i=0;i<N;i++)
e[i]=i%L;
}
printf("输出移位序列为:\n"); /*输出移位序列*/
for(i=0;i<N;i++)
{
printf("%2d",e[i]);
printf("\n");
}
printf("交织序列为:\n");
for(i=0;i<N;i++) /*构成交织序列*/
{
for(j=0;j<L;j++)
{
b[i][j]=a[(e[i]+j)%L];
printf("%3d",b[i][j]);
}
printf("\n");
}
printf("转置后的交织序列:\n");/*转置交织矩阵*/
for(i=0;i<N;i++)
{
for(j=0;j<L;j++)
b1[j][i]=b[i][j];
printf("\n");
}
for(i=0;i<L;i++)
{
for(j=0;j<N;j++)
printf("%3d",b1[i][j]);
printf("\n");
}
printf("\n");
for(t=0;t<N;t++) /*实现ZCZ序列*/
{
for(i=0;i<L;i++)
{
for(j=0;j<N;j++)
{
c[t][i][j]=b1[i][j]*H[t][j];
}
}
}
printf("输出zcz序列为:\n");
for(t=0;t<N;t++)
{
for(i=0;i<L;i++)
{
for(j=0;j<N;j++)
{
printf("%3d",c[t][i][j]);
}
printf("\n");
}
printf("\n");
}
}
其实程序不是很长的.可以帮我看看吗??