📜  门| GATE CS 2008 |问题8(1)

📅  最后修改于: 2023-12-03 15:42:11.326000             🧑  作者: Mango

门 | GATE CS 2008 | 问题8

本题是GATE计算机科学考试2008年的第8题,涉及到一道多项式乘法的问题。以下是问题描述以及代码实现的介绍。

问题描述

给定两个$n$次多项式$A(x)$和$B(x)$,要求计算它们的乘积$C(x)$。

输入格式

输入包含多组测试数据。对于每组测试数据,第一行包含一个整数$n$,表示多项式的次数。接下来两行,每行$n+1$个整数,表示对应多项式的系数。

输出格式

对于每组测试数据,输出一行,共$n+1$个整数,表示多项式$C(x)$的系数。

输入样例
2
1 2 3
3 2 1
3
2 3 4 5
1 2 3 4
输出样例
3 8 14 8
2 7 16 25 24 15
代码实现

下面是一份Python3的代码实现,其中使用到了NumPy库。需要注意的是,输入多项式系数时,需要将系数数组翻转后再传入numpy.poly1d()函数,因为系数从高次到低次排列时,numpy.poly1d()函数会将其默认为从低次到高次排列。

import numpy as np

while True:
  try:
    n = int(input())
    a = np.poly1d(list(map(int, input().split()))[::-1])
    b = np.poly1d(list(map(int, input().split()))[::-1])
    c = np.poly1d(np.convolve(a.coeffs, b.coeffs)[::-1])
    print(" ".join(list(map(str, c.coeffs[::-1]))))
  except:
    break

上面的代码实现首先通过while循环读取多组测试数据,每次读取一个多项式的次数$n$和其系数$a$、$b$,然后通过NumPy库的poly1d()函数生成对应多项式的实例$a$、$b$。紧接着,调用NumPy库的convolve()函数计算多项式的乘积,并通过poly1d()函数生成多项式$c$的实例。最后,将多项式$c$的系数转换成字符串输出即可。