它是多项式的因数吗?


11

(x-n)如果f(n)=0是一个函数,则多项式可以被因子整除f。您的工作:确定多项式函数f(x)是否可被整除(x-n)

输入

输入形式为(x-n), (Polynomial)请记住,如果n为负,(x-n)将采用的输入形式(x+n)。对于多项式,所有指数将作为放入^。系数将写在变量旁边x。一个示例多项式可能是2x^2 + x^1。两者之间将没有空格。该术语x将输入为x^1。因此,“正常”情况(x - 1)将是这样(x^1-1)。系数和幂将始终是整数。 如果系数1恰好是隐式的x。即,x可以解释为1x

输出

布尔值。真实的或虚假的。

感谢@AlexA。为了帮助我澄清这一点!

例子

Input:(x^1-1),(x^1-1)
Output: True

Input: (x^1+2),(2x^2+4x^1+2)
Output: False

Input: (x^1+7),(x^2-49)
Output: True

规则

不幸的是,我不知道如何实现摘要排行榜。如果有人知道如何,请随时编辑帖子。


输入是否为具有确切形式的字符串,即除数候选数周围的括号,零或一个空格的逗号,以及多项式周围的括号?
Alex A.


绝对不是重复的。
intboolstring 2015年

@intrepidcoder这不是重复项,因为问题不在于多项式。看看是否可以将多项式除以线性因子。
intboolstring 2015年

多项式系数将始终为整数吗?
Digital Trauma 2015年

Answers:


5

Pyth-39个字节

这是regexp和eval的不可思议的组合。我喜欢这种方法,但是会尝试改善实施。

它使用多项式余数定理

K_sPe:z"-|\+"3!v.ssXPtw,\^\x,"**""*K"\*

由于使用了评估,因此无法在线运行。


3

Casio Basic,19个字节

judge(mod(b,a)=0

事实证明,fx-CP400可以mod处理代数表达式!

多项式和因子应作为表达式输入。代码为16个字节,要a,b在参数值框中输入3个字节。


1

MATLAB,103 99 97 95 93字节

我正在尝试一些不同的事情,并使其能够节省一些字节:

eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);

如果可以进一步减少,我将发表一个解释。


旧代码说明

t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))

这也适用于Octave。您可以在线尝试。我已将该程序另存为名为的脚本isFactor.m,因此您只需isFactor在提示符下输入即可。[注意:在Octave中,运行时会发出警告-MATLAB不会生成此警告]。

输入的格式必须'(x^1+7),(x^2-49)'与问题相同。添加了引号,因此MATLAB / Octave知道它是一个字符串。

输出是a 0还是a,1取决于它是对还是错。


因此,代码的工作方式如下。首先,我们请求输入,然后解析它。解析字符串提取字符串中第一个之后的有符号数(x^1-这是我们的值n。然后,它继续在输入中的%s后面提取字符串()),-这是我们的表达式。

t=sscanf(input(''),'(x^1%d),%s')';

接下来,我们提取的值n并将其设置为x等于-当时n==x,将评估表达式是否等于零,因此这就是为什么将值存储到x的原因。此外,由于解析时的减号,我们会否定提取的数字。

x=-t(1);

然后,我们将显示输出为布尔值

disp(

输出基本上是我们评估的方程的逻辑否定。如果f(x)为零,则将返回1,否则将为零。

     ~eval(

我们正在评估输入表达式,但是要执行此操作,我们需要对其稍加重新格式化,以便MATLAB能够理解。当我们读取字符串时,它实际上是一个double类型数组,因此我们需要将其转换为字符数组。在转换之前,我们还摆脱了第一个元素,因为这是我们曾经使用过的n。然后,我们需要用相同的事物替换x前面出现的任何数字(例如4x),但*在两者之间加一个乘号(),以便MATLAB可以对其进行计算。

           regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
     )
)

1

VBScript,118116字节

a=inputbox(""):for i=0 to 9:a=replace(a,i&"x",i&"*x"):next:b=split(a,","):x=-eval(b(0)):msgbox not cbool(eval(b(1)))

因为我们知道输入的第一部分是一个线性多项式,所以我们只需要检查其根是否与第二个多项式的根匹配即可。并且我们需要根据需要eval插入以准备该术语*


1

公理77 180字节

f(a:UP(x,INT),b:UP(x,INT)):Boolean==(ground?(a)or ground?(b)=>false;p:=b;r:=a;if degree(a::POLY INT,x)>degree(b::POLY INT,x)then(p:=a;r:=b);(p rem r)$UP(x,FRAC INT)~=0=>false;true)

先前的解决方案

v(a,b)==(ground?(a) or ground?(b) or (b rem a)$UP(x,FRAC INT)~=0=>false;true)

是错误的,因为它假设度(b)> =度(a)我写的一个错误...测试和结果

(3) -> f(x^1-1,x^1-1)
   (3)  true
                                                            Type: Boolean
(4) -> f(x^1+1,2*x^2+4*x^1+2)
   (4)  true
                                                            Type: Boolean
(5) -> f(x^1+2,2*x^2+4*x^1+2)
   (5)  false
                                                            Type: Boolean
(6) -> f(x^1+7,x^2-49)
   (6)  true
                                                            Type: Boolean
(7) -> f(1, 1)
   (7)  false
                                                            Type: Boolean
(8) -> f(1, x^2+1)
   (8)  false
                                                            Type: Boolean
(9) -> f(x^8-1, x^2-1)
   (9)  true
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.