/// <summary>
        /// 计算欧拉函数Φ(m), 即0与m之间与m互素的整数个数
        /// </summary>
        /// <param name="number"></param>
        /// <param name="relativePrimes"></param>
        /// <returns></returns>
        public static long GetRelativelyPrimeCount(long number, out List <long> relativePrimes)
        {
            relativePrimes = new List <long>();
            if (number < 1)
            {
                throw new ArgumentException("Number should be positive integers.");
            }

            for (long i = 1; i <= number; i++)
            {
                var gcd = GCD.GetGCD(i, number);
                if (gcd == 1)
                {
                    relativePrimes.Add(i);
                }
            }

            return(relativePrimes.Count);
        }
        public List <long> GetSolution()
        {
            long gcd = GCD.GetGCD(_a, _m);

            if (_c % gcd != 0)
            {
                Console.WriteLine("gcd(a, m) can't divide c, this congruence has no solution.");
                return(null);
            }

            var solution = GCD.GetSolution_LinearAxBy(_a, _m);

            if (solution == null)
            {
                Console.WriteLine("Solution of ax + my = gcd(a, m) is null.");
                return(null);
            }

            long factor = _c / gcd;
            long u0     = solution[0];

            long        x0      = factor * u0;
            long        factor2 = _m / gcd;
            List <long> result  = new List <long>();

            for (int i = 0; i < gcd; i++)
            {
                var temp = x0 + i * factor2;
                if (temp >= _m)
                {
                    temp = temp % _m;
                }
                if (temp < 0)
                {
                    temp = _m - Math.Abs(temp) % _m;
                }

                result.Add(temp);
            }

            return(result);
        }