如何检查复数是否为整数

时间:2015-03-25 07:18:37

标签: python sympy complex-numbers

给定值数值x,您可以执行此操作float(x).is_integer()以检查它是否为整数。对复杂的数字有没有办法做到这一点?

我正在尝试使用列表推导来仅获取有限域上的多项式的整数根,这些整数是整数。

[r for r in solve(f,domain=FiniteField(p)) if float(r).is_integer()]

但是如果solve函数返回复杂的根,则不起作用。

有没有人知道如何:检查一个给定的(可能是复数)是否是一个整数或者知道是否有一个SymPy函数来获取有限域上多项式的根是整数?

4 个答案:

答案 0 :(得分:2)

使用ground_roots函数以及modulus关键字参数。这将返回带有多重性的模p的根。这是一个例子:

>>> from sympy import Symbol, ground_roots
>>> x = Symbol('x')
>>> f = x**5 + 7*x + 1
>>> p = 13
>>> ground_roots(f, modulus=p)
{-5: 1, 4: 2}

这表示poly modulo 13的根-54,根4具有多重性2。< / p>

顺便说一句,它看起来好像复数在这里是red herring:有限域上的积分多项式的根本可以自然地被视为复数。原始帖子中对solve的调用忽略了domain参数,只是将代数数字(其中可以合理地解释为复数)作为其结果,即可能为什么你最终看到复杂的数字。但是当试图找到以p为模的根时,这些都无法提供帮助。

答案 1 :(得分:1)

float.is_integer(z.real)告诉您实部是否为整数

答案 2 :(得分:0)

如果要检查虚部是否为零,可以执行以下操作:

In [17]: a=2 + 2j

In [18]: bool(a.imag)
Out[18]: True

In [19]: b=2 + 0j

In [20]: bool(b.imag)
Out[20]: False

答案 3 :(得分:0)

使用与您原始问题中的列表一样的方法,可以做到:

roots = [complex(r) for r in solve(f, domain=FiniteField(p))]
int_roots = [z.real for z in roots if z.real.is_integer() and not z.imag]