Pongeponge

合同数を求めようと思った

tsujimotter.hatenablog.com
 この記事を読んで合同数を求めてみようと思った。


ja.wikipedia.org
Wikipediaをさらりと読んで参考にせずぺぺっと書いて動かしてみた

コード(C#)
using System;
using System.Collections.Generic;

namespace ConsoleApp2
{
    class Program
    {
        static void Main()
        {
            Edge a = new Edge();
            Edge b = new Edge();
            Edge c = new Edge();
            List<long> congruum = new List<long>();

            for (int s = 1; s < 100; s++)
            {
                for (a.m = 1; a.m <= 100; a.m++)
                {
                    for (a.c = 1; a.c <= 100; a.c++)
                    {
                        //面積を求める式を変形して辺bを求める
                        b.c = 2 * s * a.m;
                        b.m = a.c;

                        if (CalcEdge(a, b, c) == true)
                        {
                            if (congruum.Contains(s) == false)
                            {
                                Console.WriteLine($"{a.c}/{a.m}, {b.c}/{b.m}, {c.c}/{c.m}, {s}");

                                congruum.Add(s);
                            }
                        }
                    }
                }
            }


            congruum.Sort();

            foreach (var item in congruum)
            {
                Console.WriteLine(item);
            }
        }

        private static bool CalcEdge(Edge a, Edge b, Edge c)
        {
            //斜辺の長さを求める計算
            var cu = a.c * a.c * b.m * b.m + b.c * b.c * a.m * a.m;
            var mu = a.m * a.m * b.m * b.m;
            //2乗の値になっているのでルートを取る
            c.c = (long)(Math.Sqrt(cu));
            c.m = (long)(Math.Sqrt(mu));
            //ルートをとった結果が整数か
            long cf = cu - c.c * c.c;
            long mf = mu - c.m * c.m;

            return (cf == 0 & mf == 0);
        }
    }

    public class Edge
    {
        //分母と分子
        public long m;
        public long c;
    }
}


出力

3/2, 20/3, 41/6, 5
3/1, 12/3, 15/3, 6
24/5, 70/24, 674/120, 7
21/2, 56/21, 455/42, 14
4/1, 30/4, 34/4, 15
3/1, 40/3, 41/3, 20
12/1, 42/12, 150/12, 21
33/35, 1540/33, 53911/1155, 22
6/1, 48/6, 60/6, 24
48/5, 280/48, 2696/240, 28
5/1, 60/5, 65/5, 30
24/1, 68/24, 580/24, 34
5/2, 156/5, 313/10, 39
40/3, 246/40, 1762/120, 41
20/1, 90/20, 410/20, 45
9/1, 108/9, 135/9, 54
21/1, 112/21, 455/21, 56
8/1, 120/8, 136/8, 60
35/4, 504/35, 2359/140, 63
12/1, 130/12, 194/12, 65
15/1, 140/15, 265/15, 70
45/1, 156/45, 2031/45, 78
6/1, 160/6, 164/6, 80
7/1, 168/7, 175/7, 84
77/6, 1020/77, 8521/462, 85
66/35, 6160/66, 215644/2310, 88
12/1, 192/12, 240/12, 96

5
6
7
14
15
20
21
22
24
28
30
34
39
41
45
54
56
60
63
65
70
78
80
84
85
88
96


 歯抜け状態だけど合同数になるものは出力されてる。