Próbuję napisać metodę generowania sekwencji dzielników Gaussa z liczby całkowitej Gaussa - liczba całkowita Gaussa to normalna liczba całkowita lub liczba zespolona g = a + bi
, gdzie a
i b
są zarówno liczbami całkowitymi, jak i dzielnik Gaussa liczby całkowitej Gaussa g
jest liczbą całkowitą Gaussa d
tak, że g/d
jest również liczbą całkowitą Gaussa.Python 3 - liczby zespolone
Mam następujący kod.
Wydaje się, że "głównie" działa, ale w przypadku niektórych danych wejściowych brakuje niektórych dzielników Gaussa, np. dla 2
Spodziewam się, że sekwencja zawiera divisor -2 + 0j
(który jest tylko -2
), ale go brakuje. Nie wiem, dlaczego to robi, ani gdzie jest luka w logice.
In [92]: list(gaussian_divisors(2))
Out[92]: [(-1-1j), (-1+0j), (-1+1j), -1j, 1j, (1-1j), (1+0j), (1+1j), (2+0j)]
W pytonie 3 operatorem podziału liczb całkowitych jest '//', a nie '/'. Nie mam pojęcia, co robi ze złożonymi operandami. –
Nie sądzę, że operator '//' stosuje się do liczb zespolonych, np. '1/1j' podaje' -1j' zgodnie z oczekiwaniami, ale '1 // -1j' zgłasza błąd:' TypeError: nie można pobrać piętra o liczbie zespolonej. '. Jest tak prawdopodobnie dlatego, że nie ma naturalnego uporządkowania liczb zespolonych w przeciwieństwie do liczb całkowitych. – srm
OK, prawdopodobnie będziesz chciał zdefiniować własny operator podzielności, ponieważ '/' nie będzie działało poprawnie dla wystarczająco dużych operandów. Również dla 'g = 2',' ubound = 1', twoja pętla przechodzi od -1 do 1. Nigdy nie testujesz -2. –