[英]mistakes in prime number checker c#
我寫了這段代碼來檢查一個數字是否為素數,但它不起作用,我的意思是輸出是:
1不是質數
2是素數
3不是質數
4 是質數等。
請你能告訴我我的錯誤是什么,謝謝
ps 我寫了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"));
}
正如Daisy Shipton所提到的,您的檢查不足以確定您的號碼是否為質數。
為了使一個數成為質數,它必須只能被一個或它本身整除。 這意味着您應該檢查 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"));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.