C++;:使用质数而不是质数 我需要编写一个C++程序,从用户那里接收大于2的正数,并打印数字是不是素数。

C++;:使用质数而不是质数 我需要编写一个C++程序,从用户那里接收大于2的正数,并打印数字是不是素数。,c++,C++,提醒:如果一个数字只能被其自身和1中的余数整除,而不能被任何其他数字整除,那么它就是素数。因此,小二只能被它自己和1整除,而非小四也可以被2整除 但问题在循环中,他重复这些步骤 我对2177有个问题,它不是质数 #include <iostream> #include <math.h> using namespace std; void main() { int nNumber; int i; cout << "Enter a num

提醒:如果一个数字只能被其自身和1中的余数整除,而不能被任何其他数字整除,那么它就是素数。因此,小二只能被它自己和1整除,而非小四也可以被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");

}
#包括
#包括
使用名称空间std;
void main()
{
int n编号;
int i;
无法编号;
如果(n编号>=2)
{

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


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

2177 is not a prime number.
2177 is a prime number. 
sh: 1: pause: not found
首先,您的应用程序正确地发现2177不是素数(在
i=3
),然后您继续循环(这不是必需的或有用的,因为如果它找到额外的值,它只会再次打印该行)


但是,您的主要问题是,如果(nNumber%i!=0)
,即使找到了一个值,也总是执行行
。此时
i
具有固定值
((int)sqrt(2177))+1
(即47)因为循环在该点完成并将保持在该值。因为2177不能被47整除,所以您打印出消息
2177是一个素数。

此代码应该有效。添加了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;
}
#包括
#包括
使用名称空间std;
int main(){
int n编号;
int i;
无法编号;
如果(n编号>=2)
{

对于(i=2;i)您的标题不清楚。请使用并访问。因为您从未更改
nNumber
的值,所以循环是无限的。我认为您应该在循环内部接受用户输入。@VTT什么?nNumber是限制,i是计数器,他确实更改了i。您需要记住,您已经打印了“is not prime”,如果有,则不打印“is prime”。您还应在知道值不是prime时退出循环。
void main()
不正确,因为
main()
应返回
int
使用名称空间std;
因名称空间污染而不受欢迎,而且,
系统(“暂停”)
应该做什么?如果链接已损坏,则仅链接答案没有多大帮助。请总结链接中的信息。请。最大除数是sqrt(n),而不是n/2。对于大的数字,有很大的区别。