我在计算机科学学院的一堂课上,受命编写一个程序来输出用户指定范围内的质数。这是提示:
编写一个C ++程序询问用户并输入一个起始值和一个 整数范围的结束值。计数并输出数量 此范围内的质数(包括端点)。例如,如果 用户输入2和10,则输出应为:“有4个素数 给定范围内的数字。”不要自己输出素数 在最终提交中。不要在代码中使用break语句。
将输出复制并粘贴到代码底部作为注释。 将您的名字写到输出中。除了main()之外,没有其他函数是
测试数据:50到100。
我已经在网上搜索了潜在的解决方案,但仍然无法限制如何编写此程序。这是限制条件:
我班上的最新概念是循环(for,while等),所以我不能使用数组或类似的东西。
我已经在线修改了代码以适合提示,但是它使用break:
#include <iostream>
using namespace std;
int main ()
{
int min, max, i, primeNumbers;
cout << "Enter a minimum integer: " ;
cin >> min;
cout << "Enter a maximum integer: " ;
cin >> max;
primeNumbers = 0;
for (i=min; i <= max; i++)
for (int j=2; j<i; j++)
{
if (i % j == 0)
break;
else if (i == j+1){
primeNumbers++;
}
}
cout << "There are " << primeNumbers << " prime numbers" << endl;
return 0;
}
输出:
Enter a minimum integer: 50
Enter a maximum integer: 100
There are 10 prime numbers
答案 0 :(得分:0)
使用标记来跟踪是否发现了任何因素。
for (i=min; i <= max; i++)
{
bool hasFactor = false;
for (int j=2; j<i; j++)
{
if (i % j == 0)
hasFactor = true;
if (i == j+1 && !hasFactor)
primeNumbers++;
}
}
然后可以将第二个if
移到内部循环之外。
for (i=min; i <= max; i++)
{
bool hasFactor = false;
for (int j=2; j<i; j++)
{
if (i % j == 0)
hasFactor = true;
}
if (!hasFactor)
primeNumbers++;
}
您还可以通过设置hasFactor
时立即停止内部循环,模拟break
语句而不实际使用它来优化内部循环。
for (i=min; i <= max; i++)
{
bool hasFactor = false;
for (int j=2; j<i && !hasFactor; j++)
{
if (i % j == 0)
hasFactor = true;
}
if (!hasFactor)
primeNumbers++;
}