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