POJ 3526 The Teacher’s Side of Math 已翻译

来源:互联网 发布:ubuntu 打印机 编辑:程序博客网 时间:2024/05/20 02:30

描述


学生在数学类中常规执行的任务之一是求解多项式方程。给定多项式,例如X2-4X + 1,找到它的根(2±√3)。

如果学生的任务是找到给定多项式的根,那么教师的任务是找到具有给定根的多项式。Galsone女士是一个热心的数学老师,无聊找到解决方案的二次方程,就像a +b√c一样简单。她想要制作更高程度的方程,它的解更复杂一些。像数学类中的常见问题一样,她希望将所有系数保持为整数,并保持多项式的程度尽可能小(只要它具有指定的根)。请帮助她写一个程序,执行老师的任务。

你得到一个数字t的形式:

t =m√a+n√b

其中a和b是不同的素数,m和n是大于1的整数。

在这个问题中,要求你找到整数的t的最小多项式,即满足以下条件的多项式F(X)= adXd + ad-1Xd-1 + ... + a1X + a0。

系数a0,...,ad是整数,并且ad> 0。


F(t)= 0。


满足上述两个条件的多项式中的次数d是最小的。


F(X)是原始的。也就是说,系数a0,...,ad没有大于1的公约数。


例如,整数上的最小多项式为F(X)= X4 - 10X2 + 1。验证F(t)= 0如下(α=√3,β=√2)


F(t)=(α+β)4 -10(α+β)2 + 1
 
=(α4+4α3β+6α2β2+4αβ3+β4)-10(α2+2αβ+β2)+ 1
 
= 9 +12αβ+ 36 +8αβ+ 1-10(3 +2αβ+ 2)+ 1
 
=(9 + 36 + 4-50 + 1)+(12 + 8-20)αβ
 
= 0

验证F(t)的程度实际上最小是更困难的。幸运的是,在这个问题给出的条件下,即a和b是不同的素数,m和n大于1,最小多项式的次数总是mn。此外,它总是monic。也就是说,其最高阶项(ad)的系数为1。

输入


输入由多个数据集组成,每个数据集的格式如下。

a m b n

该线表示m√a+n√b。 最后一个数据集后面是由四个零组成的单行。 单行中的数字由单个空格分隔。

每个数据集满足以下条件。

1.m√a+n√b≤4。


2.mn≤20。


答案a0,...,ad的系数在(-231 + 1)和(231-1)之间,包括这两个系数。

输出


对于每个数据集,以以下格式输出其最小多项式在整数F(X)= adXd + ad-1Xd-1 + ... + a1X + a0上的系数。

ad ad-1 ... a1 a0

非负整数必须打印无符号(+或 - )。 单行中的数字必须由单个空格分隔,并且输出中不会显示其他字符或额外空格


0 0
原创粉丝点击