我需要用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");
}
答案 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