在C#中查找素数

Ива*_*ков -2 c# primes

好的,我想从控制台输入一个整数,并检查数字是否为素数.我挖出了一个代码,然后根据我的需要对其进行了转换,但计算不正确.

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)

Tho*_*que 5

问题出在这里:

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,并且该数字将不被视为素数.