C ++:使用质数而不是质数

时间:2018-07-11 09:20:51

标签: c++

我需要用C ++编写一个程序,该程序会从用户那里收到大于2的正数,并打印该数是否为质数。

提醒:如果一个数字只能用本数和1除而不能用其他数除,则为质数。因此,主要2仅可被自身和1整除,但非主要4也可被2整除。

但是问题出在循环中,他重复了步骤

我遇到一个不是素数的数字2177的问题。

#include <iostream>
#include <math.h>
using namespace std;

void main()
{
    int nNumber;
    int i;
    cout << "Enter a number:" << endl;
    cin >> nNumber;

    if (nNumber >= 2)
    {
        for (i = 2; i <= sqrt (nNumber); i++)
        {
            if (nNumber % i == 0)
            {
                // he is repete the step her 
                cout << nNumber << " is not a prime number." << endl;
            }

        }
        if (nNumber % i != 0)
        {
            cout << nNumber << " is a prime number. " << endl;

        }


    }

    system("pause");

}

3 个答案:

答案 0 :(得分:3)

您没有描述您遇到的问题,但是运行此程序时得到的是:

2177 is not a prime number.
2177 is a prime number. 
sh: 1: pause: not found

首先,您的应用程序正确地发现2177不是质数(在i=3处),然后继续循环(这是不必要或有用的,因为如果发现额外的值,它将再次打印该行)。

但是,您的主要问题是,即使找到了值,也总是执行行if (nNumber % i != 0)。此时i具有固定值((int)sqrt(2177)) + 1(即47),因为循环在该点完成并且将保持在该值。由于2177不能被47整除,因此请打印出消息2177 is a prime number.

答案 1 :(得分:0)

此代码应该起作用。添加了 break 语句-

#include <iostream>
#include <cmath>

using namespace std;

int main() {

    int nNumber;
    int i;

    cout << "Enter a number:" << endl;
    cin >> nNumber;

    if (nNumber >= 2)
    {
        for (i = 2; i <= sqrt (nNumber); i++)
        {
            if (nNumber % i == 0)
            {
                cout << nNumber << " is not a prime number." << endl;
                break;
            }

        }

        if (nNumber % i != 0)
        {
            cout << nNumber << " is a prime number. " << endl;
        }
    }

    system("pause");
    return 0;
}

答案 2 :(得分:-1)

只需定义一个布尔变量并将其值设置为'true'。您只需要运行“ n / 2次”循环,因为最大除数是实际数的一半。因此,如果输入数字可以被'2-n / 2'之间的任何值整除,则将布尔变量false的值设置为。最后,根据布尔变量值打印结果。
看看这个链接!

https://www.programiz.com/cpp-programming/examples/prime-number