2016年2月6日土曜日

160206

Ruby


原始的アイゼンシュタイン三角形と原始的タレース三角形(1)

https://gair.media.gunma-u.ac.jp/dspace/bitstream/10087/835/1/ares050055.pdf
に載っている定理を用いて、
辺の長さがいずれも500 以下の原始的アイゼンシュタイン三角形と原始的タレース三角形を
求めてみた。

class Array
  def gcd
    self.inject{|a, b| a.gcd(b)}
  end
end

n = 500
# 定理を用いない方法
ary1 = []
(1..n).each{|x|
  (x..n).each{|y|
    m1 = x * x + y * y + x * y
    z = Math.sqrt(m1).to_i
    # x < z, y < z
    if z <= n && z * z == m1 && x + y > z
      ary1 << [x, y, z] if [x, y, z].gcd == 1
    end
  }
}
p ary1.sort!

k = 22
# 定理を用いる方法
ary2 = []
(2..k).each{|i|
  (1..i - 1).each{|j|
    if i.gcd(j) == 1 && (i - j) % 3 > 0
      x, y, z = i * i - j * j, 2 * i * j + j * j, i * i + i * j + j * j
      # x < z, y < z
      if z <= n
        ary2 << [x, y, z].sort
      end
    end
  }
}
p ary2.sort!
# 一致の確認
p ary1 == ary2

# 定理を用いない方法
ary3 = []
(1..n).each{|x|
  (x..n).each{|y|
    m2 = x * x + y * y - x * y
    z = Math.sqrt(m2).to_i
    if z <= n && z * z == m2 && x + y > z && y + z > x && z + x > y
      ary3 << [x, y, z].sort if [x, y, z].gcd == 1
    end
  }
}
p ary3.sort!

# 定理を用いる方法
ary4 = [[1, 1, 1]]
(2..k).each{|i|
  (1..i - 1).each{|j|
    if i.gcd(j) == 1 && (i - j) % 3 > 0
      u, v, w = i * i - j * j, 2 * i * j + j * j, i * i + i * j + j * j
      # 原始的アイゼンシュタイン三角形を用いて原始的タレース三角形を作る
      x, y, z = u, u + v, w
      if [y, z].max <= n
        ary4 << [x, y, z].sort
      end
      x, y = u + v, v
      if [x, z].max <= n
        ary4 << [x, y, z].sort
      end
    end
  }
}
p ary4.sort!
# 一致の確認
p ary3 == ary4

出力結果
[[3, 5, 7], [5, 16, 19], [7, 8, 13], [7, 33, 37], [9, 56, 61], [11, 24, 31], [11, 85, 91], [13, 35, 43], [13, 120, 127], [15, 161, 169], [16, 39, 49], [17, 63, 73], [17, 208, 217], [19, 80, 91], [19, 261, 271], [21, 320, 331], [23, 120, 133], [23, 385, 397], [24, 95, 109], [25, 143, 157], [25, 456, 469], [29, 195, 211], [31, 224, 241], [32, 45, 67], [32, 175, 193], [35, 288, 307], [37, 323, 343], [40, 51, 79], [40, 77, 103], [40, 279, 301], [41, 399, 421], [43, 440, 463], [48, 407, 433], [55, 57, 97], [56, 115, 151], [56, 165, 199], [64, 221, 259], [65, 88, 133], [69, 91, 139], [72, 203, 247], [75, 112, 163], [80, 357, 403], [85, 168, 223], [87, 160, 217], [88, 315, 367], [88, 437, 487], [93, 187, 247], [95, 217, 277], [104, 105, 181], [105, 247, 313], [105, 272, 337], [111, 280, 349], [115, 333, 403], [119, 145, 229], [123, 352, 427], [129, 391, 469], [133, 192, 283], [136, 209, 301], [144, 155, 259], [152, 273, 373], [161, 304, 409], [175, 369, 481], [176, 259, 379], [185, 231, 361], [205, 299, 439], [215, 336, 481], [240, 253, 427], [240, 287, 457], [275, 301, 499]]
[[3, 5, 7], [5, 16, 19], [7, 8, 13], [7, 33, 37], [9, 56, 61], [11, 24, 31], [11, 85, 91], [13, 35, 43], [13, 120, 127], [15, 161, 169], [16, 39, 49], [17, 63, 73], [17, 208, 217], [19, 80, 91], [19, 261, 271], [21, 320, 331], [23, 120, 133], [23, 385, 397], [24, 95, 109], [25, 143, 157], [25, 456, 469], [29, 195, 211], [31, 224, 241], [32, 45, 67], [32, 175, 193], [35, 288, 307], [37, 323, 343], [40, 51, 79], [40, 77, 103], [40, 279, 301], [41, 399, 421], [43, 440, 463], [48, 407, 433], [55, 57, 97], [56, 115, 151], [56, 165, 199], [64, 221, 259], [65, 88, 133], [69, 91, 139], [72, 203, 247], [75, 112, 163], [80, 357, 403], [85, 168, 223], [87, 160, 217], [88, 315, 367], [88, 437, 487], [93, 187, 247], [95, 217, 277], [104, 105, 181], [105, 247, 313], [105, 272, 337], [111, 280, 349], [115, 333, 403], [119, 145, 229], [123, 352, 427], [129, 391, 469], [133, 192, 283], [136, 209, 301], [144, 155, 259], [152, 273, 373], [161, 304, 409], [175, 369, 481], [176, 259, 379], [185, 231, 361], [205, 299, 439], [215, 336, 481], [240, 253, 427], [240, 287, 457], [275, 301, 499]]
true
[[1, 1, 1], [3, 7, 8], [5, 7, 8], [5, 19, 21], [7, 13, 15], [7, 37, 40], [8, 13, 15], [9, 61, 65], [11, 31, 35], [11, 91, 96], [13, 43, 48], [13, 127, 133], [15, 169, 176], [16, 19, 21], [16, 49, 55], [17, 73, 80], [17, 217, 225], [19, 91, 99], [19, 271, 280], [21, 331, 341], [23, 133, 143], [23, 397, 408], [24, 31, 35], [24, 109, 119], [25, 157, 168], [25, 469, 481], [29, 211, 224], [31, 241, 255], [32, 67, 77], [32, 193, 207], [33, 37, 40], [35, 43, 48], [35, 307, 323], [37, 343, 360], [39, 49, 55], [40, 79, 91], [40, 103, 117], [40, 301, 319], [41, 421, 440], [43, 463, 483], [45, 67, 77], [48, 433, 455], [51, 79, 91], [55, 97, 112], [56, 61, 65], [56, 151, 171], [56, 199, 221], [57, 97, 112], [63, 73, 80], [64, 259, 285], [65, 133, 153], [69, 139, 160], [72, 247, 275], [75, 163, 187], [77, 103, 117], [80, 91, 99], [80, 403, 437], [85, 91, 96], [85, 223, 253], [87, 217, 247], [88, 133, 153], [88, 367, 403], [91, 139, 160], [93, 247, 280], [95, 109, 119], [95, 277, 312], [104, 181, 209], [105, 181, 209], [105, 313, 352], [105, 337, 377], [111, 349, 391], [112, 163, 187], [115, 151, 171], [115, 403, 448], [119, 229, 264], [120, 127, 133], [120, 133, 143], [123, 427, 475], [133, 283, 325], [136, 301, 345], [143, 157, 168], [144, 259, 299], [145, 229, 264], [152, 373, 425], [155, 259, 299], [160, 217, 247], [161, 169, 176], [161, 409, 465], [165, 199, 221], [168, 223, 253], [175, 193, 207], [176, 379, 435], [185, 361, 416], [187, 247, 280], [192, 283, 325], [195, 211, 224], [203, 247, 275], [208, 217, 225], [209, 301, 345], [217, 277, 312], [221, 259, 285], [224, 241, 255], [231, 361, 416], [240, 427, 493], [247, 313, 352], [253, 427, 493], [259, 379, 435], [261, 271, 280], [272, 337, 377], [273, 373, 425], [279, 301, 319], [280, 349, 391], [288, 307, 323], [304, 409, 465], [315, 367, 403], [320, 331, 341], [323, 343, 360], [333, 403, 448], [352, 427, 475], [357, 403, 437], [385, 397, 408], [399, 421, 440], [407, 433, 455], [440, 463, 483], [456, 469, 481]]
[[1, 1, 1], [3, 7, 8], [5, 7, 8], [5, 19, 21], [7, 13, 15], [7, 37, 40], [8, 13, 15], [9, 61, 65], [11, 31, 35], [11, 91, 96], [13, 43, 48], [13, 127, 133], [15, 169, 176], [16, 19, 21], [16, 49, 55], [17, 73, 80], [17, 217, 225], [19, 91, 99], [19, 271, 280], [21, 331, 341], [23, 133, 143], [23, 397, 408], [24, 31, 35], [24, 109, 119], [25, 157, 168], [25, 469, 481], [29, 211, 224], [31, 241, 255], [32, 67, 77], [32, 193, 207], [33, 37, 40], [35, 43, 48], [35, 307, 323], [37, 343, 360], [39, 49, 55], [40, 79, 91], [40, 103, 117], [40, 301, 319], [41, 421, 440], [43, 463, 483], [45, 67, 77], [48, 433, 455], [51, 79, 91], [55, 97, 112], [56, 61, 65], [56, 151, 171], [56, 199, 221], [57, 97, 112], [63, 73, 80], [64, 259, 285], [65, 133, 153], [69, 139, 160], [72, 247, 275], [75, 163, 187], [77, 103, 117], [80, 91, 99], [80, 403, 437], [85, 91, 96], [85, 223, 253], [87, 217, 247], [88, 133, 153], [88, 367, 403], [91, 139, 160], [93, 247, 280], [95, 109, 119], [95, 277, 312], [104, 181, 209], [105, 181, 209], [105, 313, 352], [105, 337, 377], [111, 349, 391], [112, 163, 187], [115, 151, 171], [115, 403, 448], [119, 229, 264], [120, 127, 133], [120, 133, 143], [123, 427, 475], [133, 283, 325], [136, 301, 345], [143, 157, 168], [144, 259, 299], [145, 229, 264], [152, 373, 425], [155, 259, 299], [160, 217, 247], [161, 169, 176], [161, 409, 465], [165, 199, 221], [168, 223, 253], [175, 193, 207], [176, 379, 435], [185, 361, 416], [187, 247, 280], [192, 283, 325], [195, 211, 224], [203, 247, 275], [208, 217, 225], [209, 301, 345], [217, 277, 312], [221, 259, 285], [224, 241, 255], [231, 361, 416], [240, 427, 493], [247, 313, 352], [253, 427, 493], [259, 379, 435], [261, 271, 280], [272, 337, 377], [273, 373, 425], [279, 301, 319], [280, 349, 391], [288, 307, 323], [304, 409, 465], [315, 367, 403], [320, 331, 341], [323, 343, 360], [333, 403, 448], [352, 427, 475], [357, 403, 437], [385, 397, 408], [399, 421, 440], [407, 433, 455], [440, 463, 483], [456, 469, 481]]
true

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。