素数检查器中的错误c#

时间:2018-06-17 17:03:23

标签: c#

我已经编写了这段代码来检查一个数字是否为素数,但是它没有工作,我的意思是输出是:

1不是素数

2是素数

3不是素数

4是素数等。

你能告诉我我的错误是什么吗? 感谢

P.S。我写了number =1,因为我不能将数字除以0。

for( int number =1;number <101 && number >0;number++)
{
    int reimander = (number / 1) & (number / number);
    Console.WriteLine(number +(reimander == 0 ? " is a prime number" : " isn't a prime number"));
}

2 个答案:

答案 0 :(得分:2)

如上所述[{3}},您的检查不足以确定您的号码是否为素数。

为了使数字成为素数,它必须只能被一个或它自身整除。 这意味着你应该通过3和你正在检查behing prime的数字之间的每个数字来检查除法。

实际上,您无需检查3和数字之间的每个数字,只需检查3和数字平方之间的数字。

事实上,如果整数k是复合的(非素数),它可以写成两个整数p和q的乘积:k = p * q

然而,这两个数字p和q不能同时大于k的平方,因为在这种情况下,它们的乘积应大于k。 如果p> s和q&gt; s,然后p x q> s x s,即p x q> ķ。

代码应该类似于(未经测试):

public static bool IsPrime(int number)
    {
        /****** easy check before going to long calculations *******/
        if (number < 2) return false; // A prime number is always greater than 1
        if (number == 2) return true; // 2 is prime
        if (number % 2 == 0) return false; // Even numbers except 2 are not prime

        /****** if your number is Odd and not equals to 2, 
                you have to check every numbers between 3 
                and the square of your number               *******/
        var boundary = (int)Math.Floor(Math.Sqrt(number)); // square of your number

        // increment i by 2 because you already checked that your number is Odd 
        // and therefore not divisible by an Even number
        for (int i = 3; i <= boundary; i += 2) 
        {
            if (number % i == 0) return false; // the number can be devided by an other => COMPOSITE number
        }
        return true; // number at least equals to 3, divisible only by one or itself => PRIME number
    }

现在,您可以为要测试的每个数字执行基本循环,并调用它们的这个函数。它们是计算一系列素数的很多方法,但它们的理解要复杂得多。

 for (int number = 1; number < 101 && number > 0; number++)
 {
      Console.WriteLine(number + " is " + (IsPrime(number) ? "prime" : "not prime"));
 }

答案 1 :(得分:-2)

这里有两种问题:is-prime算法和C#语法。