簡體   English   中英

質數檢查器 C# 中的錯誤

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

這里有兩種問題:is-prime 算法和 C# 語法。

  • 要了解數字是否為素數的算法,請在線搜索數學網站。 例如, 這里
  • 一旦你知道數學是如何工作的,你就可以將它轉換成代碼。 根據您已有的代碼,您應該了解&&&之間的區別以及如何獲得余數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM