實現求出10000以內的、尾號爲3的、倒數第二位爲偶數的所有質數(包括編程思路)

話不多說,直接上代碼,註釋寫的很清楚
考慮到基礎問題,沒有用集合等一些方法來存儲數據,直接輸出到控制面板上了,並且爲了展現整個編程思路,就沒有去整合代碼,只需要實現輸出最終結果的只要註釋掉多餘的輸出就可以了

並且最後面附上了一個優化的質數求解方法,計算量會大大減少,這個體現的是一種算法思想

  static void Main(string[] args)
        {
            //本程序用於求解10000以內的、尾號爲3、倒數第二位爲偶數的所有質數


           /*****************************************************************************************
           * /*編程思路1:                                                                           *
           *  * 1、質數:除1和自身之外不能整除其他數,因此我們可以從2開始算,求解2-10000的質數       *
           *  * 2、每個數都需要去除以除1以外小於該數本身的數,若存在可整除的數,則不是質數           *
           ******************************************************************************************/
            int count = 0;//用來計數
            int count1 = 0;
            int count2 = 0;
            for (int i = 2; i < 10000; i++)//表示從2-10000以內的數
            {
                bool b = true;
                for (int j = 2; j < i ; j++)//表示從2-i以內的數
                {
                    if (i%j == 0)
                    {
                        b = false;
                        break;//不是質數則退出當前循環
                    }
                }
                if(b)//如果在上述循環中沒有執行if語句,則表示i爲質數
                {
                    Console.WriteLine(i);//輸出10000以內的所有質數
                    count++;
           /******************************************************************************************
           * 輸出10000以內尾號爲3倒數第二位爲偶數的質數                                              *
           * /*編程思路2:                                                                           *
           *  * 1、獲取質數的位數                                                                    *
           *  * 2、根據不同位數求出尾號和倒數第二位爲偶數(取餘2爲0)                                *
           ******************************************************************************************/
                    
                    switch(i.ToString().Length)//獲取質數i的長度
                    {
                        case 1://長度爲1,即爲1位數
                            if(i == 3)
                            {
                                Console.WriteLine(i);
                                count1++;
                                //不存在倒數第二位
                            }
                            break;
                        case 2://兩位數
                            if(i %10 == 3)
                            {
                                Console.WriteLine(i);
                                count1++;
                                if((i/10)%2==0)//倒數第二位爲偶數
                                {
                                    Console.WriteLine(i);
                                    count2++;
                                }
                            }
                            break;
                        case 3://3位數
                            if (i%100%10 == 3)
                            {
                                Console.WriteLine(i);
                                count1++;
                                if (((i % 100)/10) % 2 == 0)//倒數第二位爲偶數
                                {
                                    Console.WriteLine(i);
                                    count2++;
                                }
                            }
                            break;
                        case 4://四位數
                            if (i%1000%100%10 == 3)
                            {
                                Console.WriteLine(i);
                                count1++;
                                if (((i % 1000%100) / 10) % 2 == 0)//倒數第二位爲偶數
                                {
                                    Console.WriteLine(i);
                                    count2++;
                                }
                            }
                            break;
                    }
                    
                }
            }
            Console.WriteLine("共有{0}位質數",count);//輸出共有多少位質數
            Console.WriteLine("共有{0}位尾號爲3的質數",count1);
            Console.WriteLine("共有{0}位尾號爲3倒數第二位爲偶數的質數", count2);
            Console.ReadKey();
            


            //優化--採用根號減少計算數量,效果與上面一致
            count = 0;//用來計數
            for (int i = 2; i < 10000; i++)//表示從2-10000以內的數
            {
                bool b = true;
                for (int j = 2; j < System.Math.Sqrt(i); j++)//表示從2-i以內的數
                {
                    if (i % j == 0)
                    {
                        b = false;
                        break;//不是質數則退出當前循環
                    }
                }
                if (b)//如果在上述循環中沒有執行if語句,則表示i爲質數
                {
                    Console.WriteLine(i);//輸出i
                    count++;
                }
            }
            Console.WriteLine("共有{0}位質數", count);//輸出共有多少位質數
            Console.ReadKey();
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章