首页 文章

如何检查复数是否为整数

提问于
浏览
0

给定一个值数值 x ,你可以这样做 float(x).is_integer() 来检查它是否是一个整数 . 对复杂的数字有没有办法做到这一点?

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

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

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

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

3 回答

  • 1

    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 .

    顺便说一下,它看起来好像复数是一个red herring:有限域上的积分多项式的根本身不能被视为复数 . 原始帖子中对 solve 的调用忽略了 domain 参数,只是将代数数字(可以合理地解释为复数)作为结果,这可能就是你最终查看复数的原因 . 但是当试图找到模数为 p 的根时,这些都无济于事 .

  • 0

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

  • 2

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

    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
    

相关问题