Python 3 - 复数

时间:2017-01-15 16:24:56

标签: python python-3.x complex-numbers

我正在尝试编写一种方法来生成高斯整数的高斯除数序列 - 高斯整数是正常整数或复数g = a + bi其中a和{{1两个都是整数,高斯整数b的高斯除数是高斯整数gd也是高斯整数。

我有以下代码。

g / d

似乎“大部分”都有效,但对于某些输入,它缺少一些高斯除数,例如:对于def is_gaussian_integer(c): """ Checks whether a given real or complex number is a Gaussian integer, i.e. a complex number g = a + bi such that a and b are integers. """ if type(c) == int: return True return c.real.is_integer() and c.imag.is_integer() def gaussian_divisors(g): """ Generates a sequence of Gaussian divisors of a rational or Gaussian integer g, i.e. a Gaussian integer d such that g / d is also a Gaussian integer. """ if not is_gaussian_integer(g): return if g == 1: yield complex(g, 0) return g = complex(g) if type(g) == int or type(g) == float else g a = b = 1 ubound = int(math.sqrt(abs(g))) for a in range(-ubound, ubound + 1): for b in range(-ubound, ubound + 1): if a or b: d = complex(a, b) if is_gaussian_integer(g / d): yield d yield g ,我希望序列包含除数2(只是-2 + 0j),但它缺失了。我无法弄清楚为什么会这样做或逻辑中存在差距。

-2

1 个答案:

答案 0 :(得分:1)

而不仅仅是屈服

yield g

你还可以

yield -g

因为您的循环在int(math.sqrt(abs(g))) = int(sqrt(2))开始和停止,只有1所以它只会测试-10和{{1} }。

另外,如果您想在循环中加入1-2,则需要增加2ubound math.ceil结果。