[英]Trying to make a Prime Number Checker And Came across issues
嗨,我是 C# 編碼的新手,我想我應該嘗試制作素數檢查器,您可以在其中輸入一個數字,然后它會檢查它是否為素數。 我想嘗試使用函數,但遇到了一些問題,我有點困惑。 我也相信我的邏輯也是錯誤的,但我不確定如何解決它。 這是我的代碼任何幫助表示贊賞,如果你修復它,你也可以解釋你的邏輯的每一部分:
``internal class Program
{
static void Main(string[] args)
{
int number = Convert.ToInt32(Console.ReadLine());
IsNumberPrime();
Console.ReadKey();
}
static int IsNumberPrime(int number)
{
if (number <= 0)
{
Console.WriteLine(number + " is " + "not Prime");
}
else if (number == 1)
{
Console.WriteLine(number + " is " + "not Prime");
}
else if (number > 1)
{
for (int a = 2; number % a == 0; a++)
{
if (number % a == 0)
{
Console.WriteLine(number + " is " + "not Prime");
}
else
{
Console.WriteLine(number + " is " + " Prime");
}
}
}
}
}`
`
您的代碼中有幾個問題,這是完全錯誤的。
首先,我將重點關注代碼中的邏輯問題。
您沒有使用返回值,因此您可以將返回類型更改為void
。
您應該將number
作為參數傳遞給方法IsNumberPrime
。
你應該修改for循環中的條件。
你應該移動Console.WriteLine(number + " is Prime");
在for
循環之外。
static void IsNumberPrime(int number)
{
if (number <= 0)
{
Console.WriteLine(number + " is not Prime");
}
else if (number == 1)
{
Console.WriteLine(number + " is not Prime");
}
else if (number > 1)
{
for (int a = 2; number > a; a++)
{
if (number % a == 0)
{
Console.WriteLine(number + " is not Prime");
return;
}
}
Console.WriteLine(number + " is Prime");
}
}
現在談到性能,您可以運行循環直到數字的平方根,而不是直到數字,這將提高代碼的性能。 另外,不需要將a
的值遞增 1,您可以遞增 2(首先檢查除以 2,然后只檢查除以奇數,無需檢查其他偶數)。
這是優化后的代碼。
static void IsNumberPrime(int number)
{
if (number <= 1)
{
Console.WriteLine(number + " is " + "not Prime");
return;
}
if (number == 2)
{
Console.WriteLine(number + " is " + " Prime");
return;
}
if (number % 2 == 0)
{
Console.WriteLine(number + " is " + "not Prime");
return;
}
for (int i = 3; i <= Math.Sqrt(number); i = i + 2)
{
if (number % i == 0)
{
Console.WriteLine(number + " is " + "not Prime");
return;
}
}
Console.WriteLine(number + " is " + " Prime");
}
我的評論將使您的解決方案運行,我沒有檢查 Primes 的算法。 您的 Main function 正在調用 IsNumberPrime() function,它期望其參數中有一個 integer 值。 另一個說明是 IsNumberPrime 返回一個 integer 值。 因為您正在將結果記錄到控制台,所以您應該將方法聲明中的返回類型更改為 void。 以下是我對您的代碼的調整:
static void Main(string[] args)
{
int number = Convert.ToInt32(Console.ReadLine());
IsNumberPrime(number);
Console.ReadKey();
}
static void IsNumberPrime(int number)
{
if (number <= 0)
{
Console.WriteLine(number + " is " + "not Prime");
}
else if (number == 1)
{
Console.WriteLine(number + " is " + "not Prime");
}
else if (number > 1)
{
for (int a = 2; number % a == 0; a++)
{
if (number % a == 0)
{
Console.WriteLine(number + " is " + "not Prime");
}
else
{
Console.WriteLine(number + " is " + " Prime");
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.