繁体   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