Prime numbers c++

  • 本文关键字:c++ numbers Prime 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,它每次都会发生。

我的代码有什么问题?

你在if()测试的两边都break。实际上,您只会测试一个除数:

例如,利兹巴 = 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+1 的形式表示 或6k-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"并脱离循环。

最新更新