C# 素数检查器c中的错误

C# 素数检查器c中的错误,c#,C#,我写这段代码是为了检查一个数字是否为素数,但它不起作用,我的意思是输出是: 1不是质数 2是质数 3不是质数 4是质数等 你能告诉我我的错误是什么吗, 谢谢 p、 我写Enumber=1,因为我不能为0除一个数 for( int number =1;number <101 && number >0;number++) { int reimander = (number / 1) & (number / number); Console.Writ

我写这段代码是为了检查一个数字是否为素数,但它不起作用,我的意思是输出是:

1不是质数

2是质数

3不是质数

4是质数等

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

p、 我写Enumber=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"));
}
如前所述,您的检查不足以确定您的数字是否为素数

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

实际上,你不需要检查3和你的数字之间的每一个数字,只需要检查3和你的数字平方之间的数字

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

然而,这两个数字p和q不能同时大于k的平方s,因为在这种情况下,它们的乘积将大于k。 如果p>s和q>s,那么pxq>sxs,也就是说pxq>k

代码应该与未测试的代码类似:

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"));
 }

这里有两类问题:is素数算法和C语法

要了解数字是否为素数的算法,请在线搜索数学网站。例如 一旦你知道数学是如何工作的,你就可以把它转换成代码。基于您已经拥有的代码,您应该学习并学习。
嗯,number/number永远是1,number/1永远是number。因此,您的代码实际上是:int reimander=number&1;。当除以2时会找到余数,所以你要检查的是这个数是否为偶数。素数是一个只能除以1和它本身的数。您的代码检查该数字是否可以被1和自身除,但无法检查它是否可以被其他数字除。int reimander=number/1&number/number;这只是给你的数字是偶数还是奇数。这相当于1号,对吗?我很好奇落选的选票。当然,我很乐意更正或删除答案。有什么建议可以让它更有用吗?如果没有别的,我希望将来的答案更好。;它没有显示OP的错误是什么,也没有给出如何纠正错误的指导。它提供了链接,但当它们过期时,你的答案将毫无意义。好的,所以你不能删除已被接受的答案。。所以我就让它保持原样,希望它不会再被否决了。