質數(prime number)又稱
素數,有無限個。
質數定義為在大於1的自然數中,除了1和它本身以外不再有其他
因數。
目前學習了判斷數字n是否為質數的2種基本方法:
一、計數法
根據定義,既然質數只能夠被1和他本身整除。我們可以統計出1到n范圍內的整數,能夠整除n的個數。再判斷這個個數是否等於2就可以知道n是不是質數。
代碼如下:
int n = int.Parse(Console.ReadLine()); ;
int sum = 0;
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
{
sum += 1;
}
}
if (sum == 2)
{
Console.WriteLine("n是質數");
}
else
{
Console.WriteLine("n不是質數");
}
int sum = 0;
for (int i = 1; i <= n; i++)
{
if (n % i == 0)
{
sum += 1;
}
}
if (sum == 2)
{
Console.WriteLine("n是質數");
}
else
{
Console.WriteLine("n不是質數");
}
二、查找法
可以查找2 到n-1范圍內所有的數去除n,如果能夠整除,這表明這個數不是質數。
代碼如下:
int n = int.Parse(Console.ReadLine()); ;
bool isFind = false;
for (int i = 2; i <= n - 1; i++)
{
if (n % i == 0)
{
isFind = true;
break;
}
}
if (!isFind)
{
Console.WriteLine("n是質數");
}
else
{
Console.WriteLine("n不是質數");
}
bool isFind = false;
for (int i = 2; i <= n - 1; i++)
{
if (n % i == 0)
{
isFind = true;
break;
}
}
if (!isFind)
{
Console.WriteLine("n是質數");
}
else
{
Console.WriteLine("n不是質數");
}
思考:
計數法需要判斷1到n范圍內的所有整數是夠能整除n,如果n的值比較大相應的計算量就較大。
查找法一旦找到2到n-1范圍內第一個能夠整除n的數就會跳出循環,但是如果要判斷出質數也要所有的都除一遍都不能整除才能得出是質數的結論,如果n的值比較大也同樣會面對計算量就較大的問題。
如果一個程序中有多次判斷質數,再在這些結論的基礎上運行下一步程序,整個程序運行速度就會慢。比如哥赫巴德猜想(任何大於2的偶數都可以分解成2個質數的和)中如果輸入的數為7位數或8位數,程序明顯會慢很多才能運行完。
總的來說,計算機只能按照設定的程序來執行,算法需要人來優化。