【发布时间】:2015-04-13 16:36:00
【问题描述】:
任务是找出一个数是否是素数。我做了一些研究并想出了以下代码:
using System;
class PrimeOrNot
{
static void Main()
{
Console.WriteLine("Write a natural number:");
int number = int.Parse(Console.ReadLine());
if (number == 1)
{
Console.WriteLine("Not prime"); //is 1 prime?
}
if (number == 2)
{
Console.WriteLine("Is Prime");
}
if (number % 2 == 0)
{
Console.WriteLine("Not prime");
}
else
{
for (int i = 3; i < number; i += 2)
{
if (number % i == 0)
{
Console.WriteLine("Not Prime");
}
else
{
Console.WriteLine("Is Prime");
}
}
}
}
}
问题是,如果数字一直通过测试到那个 FOR 函数,它就会变得很时髦。如果它是素数,它会打印很多“Is Prime”,如果不是,它会打印很多“Is Prime”和一些“Not Prime”。我一步一步调试它,看看问题出在哪里,但我想不出解决办法。
那么我该如何处理呢?
编辑:
所以我一开始就按照 Frank 建议的方式缩小了 IF,然后使用了 BradleyDotNET 的代码,瞧。今天我学习了打破循环。我最终得到的代码是这样的:
using System;
class PrimeOrNot
{
static void Main()
{
Console.WriteLine("Write a natural number:");
int number = int.Parse(Console.ReadLine());
bool isPrime = true;
if (number > 1 && number % 2 != 0)
{
for (int i = 3; isPrime && i < number; i += 2)
{
if (number % i == 0)
{
isPrime = false;
break;
}
}
}
else
{
isPrime = false;
}
if (isPrime)
Console.WriteLine("Number is prime!");
else
Console.WriteLine("Number is not prime.");
}
}
【问题讨论】:
-
学究式地讲,if、else 和 for 都不是运算符。 :)
-
每次循环迭代都会打印两条消息之一。也许您打算将结果存储到某种 bool 变量中。然后稍后检查结果并打印“Prime”或“not”
-
@Almo 我知道!抱歉,我很新,忘记了这个词。
-
提示:如果您将“确定一个数是否为素数”的操作提取到一个单独的方法中,将会更轻松。然后,您可以在知道答案后立即返回 - 并且您当前在哪里打印“Is Prime”,您不知道答案...
标签: c# if-statement for-loop