在C#中查找数字是否为素数

use*_*017 -2 c# primes

我正在尝试使用C#查找数字是否为素数.我写了代码.它应该工作,但由于某种原因它似乎没有.

这是我的代码(我尝试输入7,13等,说它们不是素数):

class Program
{
    static void Main(string[] args)
    {
        long u = Console.Read();
        primefinder(u);
        Console.ReadLine();
    }

    private static void primefinder(long a)
    {
        long counter = 0;
        for (long b = 1; b <= a; b++)
        {
            if ((a % b) == 0)
            {
                counter++;
            }
        }

        if (counter == 2)
        {
            Console.WriteLine("Is prime!");
        }

        else
        {
            Console.WriteLine("Is not prime");
        }

        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

Dou*_*las 8

Console.Read从标准输入流中读取下一个字符,并返回其代码点.这与其整数值不同.例如,角色的代码点'7'55.另外,Read只考虑一个字符; 因此,当您键入时13,它将仅返回代码点'1'.

而不是Read,您应该使用ReadLine,它将从标准输入读取整行字符(即,直到用户按下"Enter")并将它们作为字符串返回.然后,您可以使用其Parse方法将此字符串转换为long值.

long u = long.Parse(Console.ReadLine());
Run Code Online (Sandbox Code Playgroud)

如果您想在用户输入错误输入(例如字母而不是数字)时避免出现异常,则应使用TryParse:

string s = Console.ReadLine();
long u;
if (long.TryParse(s, out u))
    primefinder(u);
else
    Console.WriteLine("Your input was not a valid number!");
Run Code Online (Sandbox Code Playgroud)