关于前期C#基础的学习

在第六章中的哥德巴赫猜想的问题中:

要求:输入一个大于0的偶数,然后计算出该数由那两个质数相加所得?

1~自己的方法是计算出该偶数内所有的质数,并且存到集合中(因为集合不限长)分别依次相加若等于该质数则输出:

        static void Main(string[] args)

        {

            Console.Write("请输入一个大于0的偶数");

            int n = int.Parse(Console.ReadLine());

                if (n > 0 && n % 2 == 0)

                {

                    #region 找出该数范围内的质数

                    List<int> tuple = new List<int>();

                    for (int i = 2; i < n - 1; i++)

                    {

                        bool isFind = false;

                        for (int j = 2; j < i - 1; j++)

                        {

                            if (i % j == 0)

                            {

                                isFind = true;

                                break;

                            }

                        }

                        if (!isFind) {

                            tuple.Add(i);

                        }

                    }

                    #endregion

                    #region 找出数字进行加法

                    for (int i = 0; i < tuple.Count;i++ ) {

                        for (int j = i + 1; j < tuple.Count; j++) {

                            if (tuple[i] + tuple[j] == n) {

                                Console.Write(n+"="+tuple[i]+"+"+tuple[j]);

                                Console.ReadLine();

                            }

                        }

                    }

                    #endregion

                }

                else

                {

                    Console.Write("输入错误,请重新输入");

                }

            Console.Clear();

        }

大家也许发现了,这样的方法,极其浪费内存,效率很低,但是,这样的方法可以找出更多的结果(虽然目前看起来没什么用)

2~关于老师的方法,输入偶数为n,n=i+j;j=n-i;先判断i是否为质数,再判断j是否为质数,如果同时成立,那么i和j就是所找的数,下面看代码

            Console.Write("请输入一个大于0的偶数");

            int n = int.Parse(Console.ReadLine());

            int i, j = 0;

            for (i = 2; i < n - 2; i++) {

                 j = n - i;

                //先判断i是不是质数

                #region 判断i

                bool isFind = false;

                for (int a = 2; a < i; a++) {

                    if (i%a==0)

                    {

                        isFind = true;

                        break;

                    }

                }

                if (isFind)

                {

                    continue;

                }

                #endregion

                #region 判断j

                // 判断j是不是质数

                isFind = false;

                for (int a = 2; a < j; a++)

                {

                    if (j%a==0)

                    {

                        isFind = true;

                        break;

                    }

                }

                if (!isFind)

                {

                    break;

                }

                #endregion

            }

            Console.Write(n+"="+i+"+"+j);

的确,老师的这种方法更高级,更需要逻辑思维能力,同时要注意一个问题,老师代码中红色部分是一定要注意的,如果直接给j=n-i,会有问题,因为无法判断j具体的值,则会报错.

posted @ 2017-03-04 22:07  SherLock9791  阅读(155)  评论(0)    收藏  举报