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

时间:2014-02-02 17:38:43

标签: 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();
    }
}

2 个答案:

答案 0 :(得分:8)

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

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

long u = long.Parse(Console.ReadLine());

如果您想在用户输入错误输入(例如字母而非数字)时避免出现异常,则应使用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!");

答案 1 :(得分:1)

Console.Read()从输入中读取一个字符,然后将其转换为long。它没有读数字。

将您的代码修改为:

    string input = Console.ReadLine();
    long u = long.Parse(input);