从用户输入范围输出素数的数量

时间:2019-02-26 05:46:28

标签: c++ loops

我在计算机科学学院的一堂课上,受命编写一个程序来输出用户指定范围内的质数。这是提示:

  

编写一个C ++程序询问用户并输入一个起始值和一个   整数范围的结束值。计数并输出数量   此范围内的质数(包括端点)。例如,如果   用户输入2和10,则输出应为:“有4个素数   给定范围内的数字。”不要自己输出素数   在最终提交中。不要在代码中使用break语句。

     

将输出复制并粘贴到代码底部作为注释。   将您的名字写到输出中。除了main()之外,没有其他函数是   

     

测试数据:50到100。

我已经在网上搜索了潜在的解决方案,但仍然无法限制如何编写此程序。这是限制条件:

  • 我不能使用break语句
  • 我无法使用函数

我班上的最新概念是循环(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

1 个答案:

答案 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++;
}