簡體   English   中英

嘗試制作質數檢查器並遇到問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM