예제 #1
0
        public static SqrtResultModel FindNumSqrtInteger(int num)
        {
            int integerNumber = (int)(Math.Sqrt(num));

            if (integerNumber * integerNumber == num)
            {
                return(null);
            }
            ;
            SqrtResultModel result = new SqrtResultModel()
            {
                IntegerNumber = integerNumber,
                Sequrence     = new List <FormulaItem>()
            };
            Dictionary <string, object> dic = new Dictionary <string, object>();
            int nextIntegerNumber           = integerNumber;
            int temp            = num;
            int tempDenominator = 1;

            while (true)
            {
                int nextDenominator = temp - nextIntegerNumber * nextIntegerNumber;
                nextDenominator /= tempDenominator;
                int tempIntegerNum = nextIntegerNumber;
                nextIntegerNumber = (int)((Math.Sqrt(temp) + nextIntegerNumber) / nextDenominator);
                int nextSubNum = nextIntegerNumber * nextDenominator - tempIntegerNum;

                FormulaItem fi = new FormulaItem()
                {
                    Denominator   = nextDenominator,
                    IntegerNumber = nextIntegerNumber,
                    Subtractor    = nextSubNum
                };
                if (dic.ContainsKey(fi.ToString()))
                {
                    break;
                }
                dic.Add(fi.ToString(), null);
                result.Sequrence.Add(fi);
                nextIntegerNumber = nextSubNum;
                tempDenominator   = nextDenominator;
            }
            return(result);
        }
        public static SqrtResultModel FindNumSqrtInteger(int num)
        {
            int integerNumber = (int)(Math.Sqrt(num));
            if (integerNumber * integerNumber == num)
            {
                return null;
            };
            SqrtResultModel result = new SqrtResultModel()
            {
                IntegerNumber = integerNumber,
                Sequrence = new List<FormulaItem>()
            };
            Dictionary<string, object> dic = new Dictionary<string, object>();
            int nextIntegerNumber = integerNumber;
            int temp = num;
            int tempDenominator = 1;
            while (true)
            {
                int nextDenominator = temp - nextIntegerNumber * nextIntegerNumber;
                nextDenominator /= tempDenominator;
                int tempIntegerNum = nextIntegerNumber;
                nextIntegerNumber = (int)((Math.Sqrt(temp) + nextIntegerNumber) / nextDenominator);
                int nextSubNum = nextIntegerNumber * nextDenominator - tempIntegerNum;

                FormulaItem fi = new FormulaItem()
                {
                    Denominator = nextDenominator,
                    IntegerNumber = nextIntegerNumber,
                    Subtractor = nextSubNum
                };
                if (dic.ContainsKey(fi.ToString()))
                    break;
                dic.Add(fi.ToString(), null);
                result.Sequrence.Add(fi);
                nextIntegerNumber = nextSubNum;
                tempDenominator = nextDenominator;
            }
            return result;
        }