ei=N-1*i(modL)=4-1i(mod7)=2i(mod7),(0<i<N).所以N,L的逆为2.




ei=N-1*i(modL)=4-1i(mod7)=2i(mod7),(0<i<N).所以N,L的逆为2.




 2006-05-12 18:30
	    2006-05-12 18:30
   2006-05-12 18:46
	    2006-05-12 18:46
   2006-05-12 18:49
	    2006-05-12 18:49
   2006-05-12 18:57
	    2006-05-12 18:57
  #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");
 }
}
 其实程序不是很长的.可以帮我看看吗??

 2006-05-12 18:59
	    2006-05-12 18:59