मैं एक गाऊसी पूर्णांक के गाऊसी divisors के एक दृश्य उत्पन्न करने के लिए एक विधि लिखने की कोशिश कर रहा हूँ - एक गाऊसी पूर्णांक या तो एक सामान्य पूर्णांक या जटिल संख्या g = a + bi
वह जगह है जहाँ a
और b
दोनों पूर्णांक हैं, और गॉसियन इंटीजर का गॉसियन डिवीजर g
एक गॉसियन पूर्णांक d
है जैसे कि g/d
भी गॉसियन पूर्णांक है।अजगर 3 - जटिल संख्याओं
मुझे निम्न कोड मिला है।
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
यह करने के लिए "ज्यादातर" काम है, लेकिन कुछ इनपुट के लिए इसे बाहर कुछ गाऊसी divisors, उदा याद आ रही है लगता है 2
के लिए मैं अनुक्रम में divisor -2 + 0j
(जो केवल -2
है) शामिल करने की अपेक्षा करेगा, लेकिन यह गायब है। मैं यह नहीं समझ सकता कि यह ऐसा क्यों कर रहा है या तर्क में अंतर कहाँ है।
In [92]: list(gaussian_divisors(2))
Out[92]: [(-1-1j), (-1+0j), (-1+1j), -1j, 1j, (1-1j), (1+0j), (1+1j), (2+0j)]
पायथन 3 में पूर्णांक विभाजन ऑपरेटर '//' नहीं, '/' है। मुझे नहीं पता कि जटिल संचालन के साथ क्या किया जाता है। –
मुझे नहीं लगता कि '//' ऑपरेटर जटिल संख्याओं पर लागू होता है, उदा। '1/1j' आपको अपेक्षित के रूप में' -1j' देता है लेकिन '1 // -1j' एक त्रुटि फेंकता है: 'TypeError: जटिल संख्या का फर्श नहीं ले सकता है।'। ऐसा शायद इसलिए है क्योंकि पूर्णांक के विपरीत जटिल संख्याओं का कोई प्राकृतिक क्रम नहीं है। – srm
ठीक है, आप शायद अपने स्वयं के विभाज्यता ऑपरेटर को परिभाषित करना चाहते हैं क्योंकि '/' बड़े पर्याप्त संचालन के लिए सही तरीके से काम नहीं करेगा। इसके अलावा, 'g = 2',' ubound = 1' के लिए, इसलिए आपका लूप -1 से 1 तक जाता है। आप कभी परीक्षण नहीं करते हैं। –