【C#】 迴圈小練習_相親數(Amicable numbers)

相親數(Amicable numbers)

相親數(Amicable numbers),又稱親和數、友愛數、友好數,指兩個正整數中,彼此的全部正因數之和(本身除外)與另一方相等。
畢達哥拉斯曾說:「朋友是你靈魂的倩影,要像220與284一樣親密。」每一對相親數都是過剩數配虧數,較小的是過剩數,較大的是虧數。

例如220與284:

  • 220的全部正因數(除掉本身)相加是:1+2+4+5+10+11+20+22+44+55+110=284
  • 284的全部正因數(除掉本身)相加的和是:1+2+4+71+142=220

相親數中可輕易推出,一方的全部正因數之和與另一方的全部正因數之和相等。(此敘述不可逆,不能用來判斷是否為親和數)

  • 220的全部正因數之和是:1+2+4+5+10+11+20+22+44+55+110+220 = 284+220 = 504
  • 284的全部正因數之和是:1+2+4+71+142+284 = 220+284 = 504

老實說…老實說…老實說...在練習這題之前,根本不知道有這種相親數..>"<

最主要是要取得真因數的和,假如有一個數A,先求出A的真因數之和B,接著算出B的真因數之和C
如果C=A,那麼A跟B就是相親數。

class Program
    {
        private static int GetSum(int num)
        {
            int sum = 1;
            int limit = (int)Math.Sqrt(num); //傳回平方根
            for (int i = 2; i <= limit; i++) //迴圈相除
            {
                if (num % i == 0)   //整除
                {
                    sum += i + num / i; // 累加求和
                }
            }
            return sum;
        }

        public static void GoGo(int from, int to)
        {
            int count = 0;
            int xcount = 0;
            for (int num = from; num <= to; num++)
            {
                int sum1 = GetSum(num);
                if (sum1 > num)
                {
                    int sum2 = GetSum(sum1);
                    if (sum2 == num)
                    {
                        Console.WriteLine(string.Format("{0}和 {1}是一對相親數:", sum1, sum2));
                        xcount++;
                    }
                }
            }
            Console.WriteLine(string.Format("在 {0}和 {1}之中,共有 {2}對相親數:", from, to, xcount));
            xcount++;
        }

        public static void Main(string[] args)
        {
            GoGo(2, 100000);
            Console.ReadLine();
        }
    }
    

畢達哥拉斯是畢氏定理(又稱畢達哥拉斯定理)的發現者。
數學…數學.…數學..…數學...…數學....…數學.......我搞不懂你啊~~

水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。