C# 素数检查器c中的错误
我写这段代码是为了检查一个数字是否为素数,但它不起作用,我的意思是输出是: 1不是质数 2是质数 3不是质数 4是质数等 你能告诉我我的错误是什么吗, 谢谢 p、 我写Enumber=1,因为我不能为0除一个数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
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的错误是什么,也没有给出如何纠正错误的指导。它提供了链接,但当它们过期时,你的答案将毫无意义。好的,所以你不能删除已被接受的答案。。所以我就让它保持原样,希望它不会再被否决了。