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

C++ : using prime number and not a prime number

本文关键字:C++      更新时间:2023-10-16

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

你没有描述你有什么问题,但当我运行这个程序时,我得到的是:

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.

此代码应该可以工作。添加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;
}

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

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

相关文章:
  • 没有找到相关文章