gaussian_representations.sf 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 05 May 2022
  4. # https://github.com/trizen
  5. # Represent a given integer as a product of two Gaussian integers.
  6. # For example: 5 = (2 + i)(2 − i) and 13 = (3 + 2i)(3 − 2i).
  7. func gaussian_divisors(n) {
  8. var D = []
  9. n.sum_of_squares.map_2d {|a,b|
  10. [[1,-1], [-1, -1], [-1, 1], [1,1]].map_2d {|i,j| ([i*a, j*b], [j*b, i*a]) }...
  11. }.each_2d {|a,b|
  12. D << Gauss(a,b)
  13. }
  14. D.sort.uniq
  15. }
  16. for n in (1..20) {
  17. var g = gaussian_divisors(n) || next
  18. say ("#{n} = ", g.map {|d|
  19. var u = Gauss(n,0)/d
  20. "(%s + %si)*(%s + %si)" % (d.a, d.b, u.a, u.b)
  21. }.join(' = '))
  22. }
  23. __END__
  24. 1 = (-1 + 0i)*(-1 + 0i) = (0 + -1i)*(0 + 1i) = (0 + 1i)*(0 + -1i) = (1 + 0i)*(1 + 0i)
  25. 2 = (-1 + -1i)*(-1 + 1i) = (-1 + 1i)*(-1 + -1i) = (1 + -1i)*(1 + 1i) = (1 + 1i)*(1 + -1i)
  26. 4 = (-2 + 0i)*(-2 + 0i) = (0 + -2i)*(0 + 2i) = (0 + 2i)*(0 + -2i) = (2 + 0i)*(2 + 0i)
  27. 5 = (-2 + -1i)*(-2 + 1i) = (-2 + 1i)*(-2 + -1i) = (-1 + -2i)*(-1 + 2i) = (-1 + 2i)*(-1 + -2i) = (1 + -2i)*(1 + 2i) = (1 + 2i)*(1 + -2i) = (2 + -1i)*(2 + 1i) = (2 + 1i)*(2 + -1i)
  28. 8 = (-2 + -2i)*(-2 + 2i) = (-2 + 2i)*(-2 + -2i) = (2 + -2i)*(2 + 2i) = (2 + 2i)*(2 + -2i)
  29. 9 = (-3 + 0i)*(-3 + 0i) = (0 + -3i)*(0 + 3i) = (0 + 3i)*(0 + -3i) = (3 + 0i)*(3 + 0i)
  30. 10 = (-3 + -1i)*(-3 + 1i) = (-3 + 1i)*(-3 + -1i) = (-1 + -3i)*(-1 + 3i) = (-1 + 3i)*(-1 + -3i) = (1 + -3i)*(1 + 3i) = (1 + 3i)*(1 + -3i) = (3 + -1i)*(3 + 1i) = (3 + 1i)*(3 + -1i)
  31. 13 = (-3 + -2i)*(-3 + 2i) = (-3 + 2i)*(-3 + -2i) = (-2 + -3i)*(-2 + 3i) = (-2 + 3i)*(-2 + -3i) = (2 + -3i)*(2 + 3i) = (2 + 3i)*(2 + -3i) = (3 + -2i)*(3 + 2i) = (3 + 2i)*(3 + -2i)
  32. 16 = (-4 + 0i)*(-4 + 0i) = (0 + -4i)*(0 + 4i) = (0 + 4i)*(0 + -4i) = (4 + 0i)*(4 + 0i)
  33. 17 = (-4 + -1i)*(-4 + 1i) = (-4 + 1i)*(-4 + -1i) = (-1 + -4i)*(-1 + 4i) = (-1 + 4i)*(-1 + -4i) = (1 + -4i)*(1 + 4i) = (1 + 4i)*(1 + -4i) = (4 + -1i)*(4 + 1i) = (4 + 1i)*(4 + -1i)
  34. 18 = (-3 + -3i)*(-3 + 3i) = (-3 + 3i)*(-3 + -3i) = (3 + -3i)*(3 + 3i) = (3 + 3i)*(3 + -3i)
  35. 20 = (-4 + -2i)*(-4 + 2i) = (-4 + 2i)*(-4 + -2i) = (-2 + -4i)*(-2 + 4i) = (-2 + 4i)*(-2 + -4i) = (2 + -4i)*(2 + 4i) = (2 + 4i)*(2 + -4i) = (4 + -2i)*(4 + 2i) = (4 + 2i)*(4 + -2i)