簡體   English   中英

素數C ++

[英]Prime numbers c++

我有以下代碼:

#include <iostream>
#include <cmath>

using namespace std;

int n, liczba;

int main()
{
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> liczba;
        if (liczba < 2) {
            cout << "NIE" << endl;
        } else if (liczba == 2) {
            cout << "TAK" << endl;
        }

        for (int i = 2; i < liczba; i++) {
            if (liczba % i == 0) {
                cout << "NIE" << endl;
                break;
            } else if (liczba % i != 0) {
                cout << "TAK" << endl;
                break;
            }
        }
    }
    return 0;
}

無論您輸入的數字是素數還是否,該程序都應該寫"TAK""NIE" 變量n是要輸入到程序中的數字數,而liczba是要檢查其是否為質數的數字。 期待一件重要的事情似乎很好。 如果我輸入數字9,它說是"TAK"而不是"NIE" ..我發現這恰好發生在數字上: 9,27,45,63,81 ,依此類推..如果我從9開始加18 ,它將每次都會發生。

我的代碼有什么問題?

break荷蘭國際集團在您的兩面if()測試。 實際上,您只會測試一個除數:

例如liczba = 9

1. if (liczba % 2 == 0) -> if (9 % 2 == 0) -> if (1 == 0) -> false
2. ...jump to else
3. if (liczba % 2 != 0) -> if (9 % 2 != 0) -> if (1 != 0) -> TRUE
4. spit out 'tak' and break out of the loop

如果有剩余,則不能“盡早”突破循環。 這意味着您測試的除數不是數量的因數。 如果您確實得到0的余數,則只能提早休息,這意味着該數字不是素數-它是合成的。

暗示:

所有素數(2和3除外)都可以6k+16k-1的形式表示,其中k是正整數。

因此,這應該工作:

bool IsPrime( int number )
{

 if ( ( (!(number & 1)) && number != 2 ) || (number < 2) || (number % 3 == 0 && number != 3) )
      return (false);

 for( int k = 1; 36*k*k-12*k < number;++k)
     if ( (number % (6*k+1) == 0) || (number % (6*k-1) == 0) )
         return (false);
     return true;
}

取自確定數字是否為質數

您尚未使用標志,因此在第一次檢查后會顯示NIE 此外,您缺少else語句。 嘗試以下方法:

#include <iostream>
#include <cmath>
using namespace std;
int n,liczba;
int main()
{
    cin >> n; //
    for(int i=0;i<n;i++)
        {
            cin>>liczba;
            if (liczba < 2)
                {
                cout << "NIE" << endl;
                }
            else if (liczba == 2)
            {
                cout << "TAK" << endl;
            }
            else
            {
                bool isPrime = true;
                for (int i=2;i<liczba;i++)
                {

                    if (liczba % i == 0)
                        {
                            isPrime = false;
                            break;
                        } 
                }
                if(isPrime)
                    cout<<"TAK";
                else
                    cout<<"NIE";
            }

        }
    return 0;
}

當前,如果輸入7,它將檢查7 % 2 == 0 由於不是,它將打印“ NIE”並退出循環。

暫無
暫無

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

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