C#編程實現判斷素數的方法

第一種方法,根據素數的定義判斷,代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;

namespace fastPrim
{
    class Program
    {
        /// <summary>
        /// 判斷素數
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        static bool isPrim(int num)
        {
            for(int i=2;i<num-1;i++)
            {
                if (num % i == 0)
                {                    
                    return false;
                }
            }
            Console.WriteLine(num.ToString() + "是素數");
            return true;
        }
        static void Main(string[] args)
        {
            //判斷100以內的素數
            int n = 100;
            for (int i = 2; i < n+1; i++)
            {
                isPrim(i);
            }

            Console.Read();
        }
    }
}

根據素數的定義,即素數是隻能被1和本身整除的數字,上面的isPrim函數就是根據這點進行編碼實現的。

第二種方法,是對第一種判斷素數方法的優化,原理是:如果一個數n不能被i整除,那他也不能被n/i整除,所以我們只需要判斷n能不能被自己的平方根以內的數整除即可。

/// <summary>
        /// 判斷素數的改良方法
        /// </summary>
        /// <param name="num"></param>
        /// <returns></returns>
        static bool isPrimFast(int num)
        {
            for (int i = 2; i < Math.Sqrt(num); i++)
            {
                if (num % i == 0)
                {
                    return false;
                }
            }
            Console.WriteLine(num.ToString() + "是素數");
            return true;
        }

從上面的代碼可以看出,第一種判斷素數方法是線性時間複雜度,而第二種方法是平方根時間複雜度,比較節省時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章