我是计算机科学的新手并且有一个简单的问题。我试图创建一个程序,它将采用两个整数输入并打印出它们之间的所有素数。
我遇到的问题是当我在嵌套for循环中使用break时。在找到素数后,它不会在下一个外部循环中点击嵌套的for循环。因此,当搜索8到15之间的素数时,它将打印出“11 12 13 14 15”。它最初是正确的,但在找到一个素数后,它表明其余的有界数字也是素数。
#include <iostream>
using namespace std;
int main()
{
// Prime number finder:
cout << "Enter two numbers and I will find the prime numbers between them.\n\n";
int num1, num2, i = 2;
bool valid;
cout << "Enter the lower limit: ";
cin >> num1;
cout << endl << "Enter the higher limit: ";
cin >> num2;
if (num2 <= num1)
{
cout << "Enter a number that is larger than the lower limit./n";
}
if (num1 <= 1)
{
cout << "1 2 ";
num1 = 3;
}
else if (num1 == 2)
{
cout << "2 ";
num1 = 3;
}
for (num1; num1 <= num2; num1++)
{
valid = true;
for (i; i < num1; i++)
{
if ((num1 % i) == 0)
{
valid = false;
break;
}
}
if (valid == true)
cout << num1 << " ";
}
return 0;
}
答案 0 :(得分:3)
问题是你没有重置i的值。将你的循环改为:
for (int i = 2; i < num1; i++)
并删除您之前对i
的定义,因为此时不需要它。
更好的是,更改整个检查数字是否为一个返回bool的单独函数。
这应该教你单一职责编写职能。你的函数循环遍历一堆数字,并且每个数字都检查它是否是素数。后一部分属于单独的功能。有趣的是,如果您首先编写单独的函数,则不太可能出现您的错误。
答案 1 :(得分:1)
在下面的for循环中,我未初始化,您必须设置i=2
,同时将上限设置为sqrt(num1)
。
for (i=2; i <= sqrt(num1); i++)
{
if ((num1 % i) == 0)
{
valid = false;
break;
}
}
使用sqrt()
还包括以下头文件,如下所示
#include<cmath.h>