我已经编写了这段代码来检查一个数字是否为素数,但是它没有工作,我的意思是输出是:
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"));
}
答案 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#语法。
&
and &&
和how to get a remainder。