gpt4 book ai didi

c++ - 寻找素数的程序意外停止

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:41 25 4
gpt4 key购买 nike

我编写了一个非常简单的程序来查找用户指定范围内的素数。但是我遇到了一个问题。当程序达到合数时,程序就停止打印质数。我试图找出它停止的原因,但我根本无法理解它有什么问题,可能是因为我是编程新手。无论如何,这是代码。

#include <iostream>
using namespace std;
int main()
{
int y;
int range;
cout << "Please enter the range. \n";
cin >> range;
for (y = 2; y <= range; y++)
{
int result;
for (int x = 1; x < y - 1; x++)
{
int prime = y - x;
if (y%prime != 0)
{

}
else
{
result = 0;
}
}
if (result != 0)
{
cout << y << " is a prime number. \n";
}
}
}

最佳答案

正如 Brian Gradin 指出的那样,我看到的唯一问题是您应该将结果初始化为非零整数。

int result = 1;

只有在这个初始化之后,你才能在for循环之后进行有效检查,结果是否已经变为零。

如果没有初始化,对该变量值的任何访问都会导致未定义的行为。

编辑:

为了完整起见,我应该添加其他人的建议,即更标准的做法是:

for (y = 2; y <= range; y++)
{
bool isPrime = true;

// The following loop should be changed to loop through the Sieve of primes
for (int x = 2; x*x < y ; x++) // You need to loop only till sqrt(y)
{
if (y%x == 0) // if you found a factor
{
isPrime = false;
break;
}
}
if ( isPrime )
{
cout << y << " is a prime number. \n";
// and add this to the sieve of primes.
}
}

关于c++ - 寻找素数的程序意外停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811636/

25 4 0
文章推荐: c++ - 在单独的线程中为新小部件设置公共(public)父 Qt 小部件
文章推荐: javascript - Sprite vs Group Collider 在启用Body 设置为 true 的移相器中不起作用
文章推荐: javascript - 如何在滚动时弹起动画?
文章推荐: javascript - 将