【问题标题】:Print prime numbers less than or equal to an input C++打印小于或等于输入 C++ 的素数
【发布时间】:2025-12-05 20:05:02
【问题描述】:

我正在尝试创建一个提示用户输入的程序。从该输入中,我应该打印所有小于和等于该值的素数。我真的很难做到这一点。

我知道我需要从 2 循环到数字。 了解我所缺少的。这是我到目前为止的代码(全部在 main 内),当输入为 5 时,输出为 1 1,这是错误的。我想要发生的事情(示例):如果输入是 13,那么输出应该是 2 3 5 7 11 13。

    int i = 0;
    int getNumber = 0;
    cin >> getNumber;
    

    for (i = 2; i <= getNumber; i++){         
     
        if (getNumber % i == 0){
            prime = false;                      
        }else{
            prime = true;
            
        }
        if (prime == true){
            cout << i << " " << endl;}
    }

【问题讨论】:

  • 您的代码在初始化之前似乎使用了j
  • 您能用伪代码解释一下您的主要验证算法是什么吗?考虑一下,如果您将代码设计为使用函数isPrime(int number),您将如何在循环中使用它?该循环会迭代什么?
  • 您的代码似乎也打印了变量prime,您在 cmets 中已注意到该变量是一个布尔值。您的问题描述说您应该打印int
  • 您确定要检查素数吗?假设 getNumber 等于 57,并且在循环的第三次迭代中,i 是 4。那么 i 不会除以 57。结果你会转到 prime = true 分支,即使 4 肯定是 not 素数。

标签: c++


【解决方案1】:

每当您进入else 分支时,您将prime 设置为true,然后将其发送给cout。布尔值true 输出为整数1。对于输入数字 5,您输入路径两次,因此结果为 1 1

【讨论】:

    【解决方案2】:

    使用此代码,您将打印出小于输入数字的所有数字。 您可以考虑创建一个函数来检查“i”是否为素数且低于“n”。

    虽然,有效的方法是创建两个函数 - 一个用于检查素数,另一个用于打印输入数字下方的数字。简而言之,您将需要 2 个 for 循环。

    【讨论】: