⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多项式环积实现.cpp

📁 关于NTRU加密算法的实现 环内多项式的加 减 乘 除
💻 CPP
字号:
/*例如:        a=2+X+3X^2
                b=1+2X+X^2
      a*b=2+X+3X^2+4X+2X^2+6+2X^2+1+3X
         =9+8X+7X^2
*/
#include "stdio.h" 
#include "stdlib.h"

//-----------输出数组长度----------
int input() 
{ 
	int nSize;
	//printf("输入一个数:");  
	scanf("%d",&nSize); 
	return nSize; 
} 

//-----------输入数组----------
int *arith(int nSize) 
{ 
	int *array; 
	array = (int*)malloc(nSize*sizeof(int));
	for(int i = 0;i<nSize;i++) 
	{ 
		printf("输入%d个数组元素:",i); 
		scanf("%d",&array[i]); 
	} 
	return array; 
} 

//-----------输出----------
void output(int *array,int nSize) 
{ 
	for(int i = 0;i<nSize;i++) 
	{ 		 
		printf("%d\t",array[i]); 
	} 
	printf("\n"); 
	free(array); 
}
//-----------两个数组相乘----------(算法1):
int *arraymultiply(int *p,int N,int *q,int M)
{
	int k;
	int *array; 
	array = (int *)malloc(N*sizeof(int));
	for(int i=0;i<M;i++)
	{
		k=i+1;
		array[i]=0;
		for(int j=0;j<N;j++)
		{
			k--;
			array[i]=array[i]+p[k]*q[j];
			if(k==0)
			{
				if(M>N)
					k=M;
				else
					k=N;
			}
		}		
	}
	return array;
}
//------------------主函数--------- 
void main()
{
	int n,m;
	int *a,*b;
	int * arithmetic1;
	//-----------------------------
	printf("输入a数组:\n");
	printf("输入a数组的长度:");
	n = input(); //调用长度函数
	printf("\n"); 
	a = arith(n); //调用输入函数
	printf("\n");
	//-----------------------------
	printf("输入b数组:\n");
	printf("输入b数组的长度:");
	m = input(); //调用长度函数
	printf("\n");
	b = arith(m); //调用输入函数
	printf("\n");
				
	//------------------------------
    arithmetic1 = arraymultiply(a,n,b,m);
	printf("输入的a数组:\n");
	output(a,n);//调用输出函数
	printf("输入的b数组:\n");
	output(b,m);
	printf("输出的结果如下:\n");
	output(arithmetic1,n);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -