【问题标题】:Outputting amount of prime numbers from a user input range从用户输入范围输出素数数量
【发布时间】:2019-02-26 05:46:27
【问题描述】:

我在计算机科学学院上课,我的任务是编写一个程序来输出用户指定范围内的素数数量。提示如下:

编写一个 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

【问题讨论】:

    标签: c++ loops


    【解决方案1】:

    使用标志来跟踪是否发现了任何因素。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 2019-06-17
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2022-11-19
      相关资源
      最近更新 更多