首页 > 编程知识 正文

多项式乘法练习题,多项式的乘法教学设计

时间:2023-05-06 14:58:04 阅读:195682 作者:2446

package com.ntru.demo.test.ringSignature;

import java.util.Random;

public class Time_costs {

//环多项式赋值public static void fuzhi(int q, Random random, int[] h) { for (int i = 0; i < h.length; i++) { h[i] = random.nextInt(q);//从区间[0,q-1]选择一个随机数 //System.out.println("h" + "["+i+"]"+"["+j+"]=" + h[i][j]); } }//两个多项式相乘public static void polymulti(int[] a, int[] b, int[] c) { for (int s = 0; s < a.length + b.length - 1 ; s++) { for (int i = 0; i < a.length; i++) { for (int j = 0; j < b.length; j++) { if(s == i + j){ c[s] += a[i] * b[j]; } } } //System.out.println("c" + "["+s+"]=" + c[s]); }}//取模运算public static void modxn(int[] c) { int c_lenth = c.length; int center = (c_lenth-1)/2; int [] D = new int [center+1];//存放取模运算后的结果 D[0] = c[0];//常数项不变 for (int i = 1; i < center + 1 ; i++) { D[i] = c[i] + c[i + center]; } for (int i = 0; i < D.length ; i++) { //System.out.println("D"+ "["+i+"]=" +D[i]); }}public static void main(String[] args) { //定义参数, 定义环多项式 int n = 512; Random random = new Random(); int q = (int)Math.pow(2,35); //int [] A = {1,2,3};//定义一维多项式 int [] A = new int[n]; int [] A1 = new int[n]; fuzhi(q, random, A); fuzhi(q, random, A1); //int [] B = {1,2,3};//定义一维多项式 int [] B = new int[n]; int [] B1 = new int[n]; fuzhi(q, random, B); fuzhi(q, random, B1); int [] C = new int[A.length + B.length - 1];//存放A*B合并同类项后的结果 int [] C1 = new int[A1.length + B1.length - 1];//存放A*B合并同类项后的结果 long startTime = System.nanoTime(); //获取开始时间 //两个多项式相乘 polymulti(A, B, C); polymulti(A1, B1, C1); //取模运算 modxn(C); modxn(C1); long endTime = System.nanoTime(); //获取结束时间 int count1 = 0; int count2 = 0; for (int i = 0; i < 1000; i++) { count1 += (endTime - startTime); count2 = count1/1000; } System.out.println("多项式乘运算程序运行时间:" + count2 + "ns"); //输出程序运行时间}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。