第一種方法,根據素數的定義判斷,代碼如下:
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;
}
從上面的代碼可以看出,第一種判斷素數方法是線性時間複雜度,而第二種方法是平方根時間複雜度,比較節省時間。