好的,我想从控制台输入一个整数,并检查数字是否为素数.我挖出了一个代码,然后根据我的需要对其进行了转换,但计算不正确.
using System;
class PrimeNumber
{
static void Main()
{
Console.Write("Type a number: ");
string line = Console.ReadLine(); // Read string from console
int value;
if (int.TryParse(line, out value)) // Try to parse the string as an integer
{
int x = 0;
if (value == 1) Console.WriteLine("not prime");
if (value == 2) Console.WriteLine("prime");
for (int i = 3; i < value*value; i+=2)
{
if (value % 2 == 0) x++; break;
if (value % i == 0) x++; break;
}
Console.WriteLine(x);
if (x == 0) Console.WriteLine(value + " is prime");
else Console.WriteLine(value + " is not prime");
}
else
{
Console.WriteLine("Invalid input.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在这里:
if (value % 2 == 0) x++; break;
if (value % i == 0) x++; break;
Run Code Online (Sandbox Code Playgroud)
该break声明没有的部分if,只有x++是......所以break是一直执行的条件是否为真.
您应该将语句括在大括号中:
if (value % 2 == 0) { x++; break; }
if (value % i == 0) { x++; break; }
Run Code Online (Sandbox Code Playgroud)
另外两个问题:
if (value % 2 == 0)它放在循环之外,因为在每次迭代时再次检查它是没用的.sqrt(value)(包括),而不是value².如果你去value²,在某些时候i将等于value,所以value % i将是0,并且该数字将不被视为素数.