王鹿其 发表于 2023-10-12 18:43:20

求1到100之间的质数,我的代码错在哪里

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
        int a=3;
        int b=2;
        cout<<"质数有2"<<endl;
        while(a<=100)
        {
                while(b<=(a-1))
                {
                        if(a%b==0)
                        {
                                cout<<endl;    break;
                        }
                        b++;
                }
                a++;
        }
        cout<<"质数有"<<a<<endl;
       
        return 0;
}

isdkz 发表于 2023-10-12 18:43:59

代码中存在两个问题:

1. 变量 b 在内层循环结束后没有重置为 2,导致下一次内层循环时 b 的值不是从 2 开始,而是从上一次循环结束时的值开始,从而导致判断错误。

2. 在判断质数时,只有在内层循环结束后才能确定该数是否为质数,但是在输出结果时却在内层循环中输出了结果,导致输出了错误的结果。

修改后的代码如下:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int a=3;
    int b=2;
    bool flag; // 标记是否为质数
    cout<<"质数有2"<<endl;
    while(a<=100)
    {
      flag = true; // 假设为质数
      b = 2; // 重置 b 的值为 2
      while(b<=(sqrt(a)))
      {
            if(a%b==0)
            {
                flag = false;
                break;
            }
            b++;
      }
      if(flag) // 在内层循环结束后判断是否为质数
      {
            cout<<a<<endl;
      }
      a++;
    }
    return 0;
}

修改后的代码中,通过在内层循环结束后判断是否为质数,解决了输出错误结果的问题,同时通过重置变量 b 的值,解决了判断错误的问题。

Mike_python小 发表于 2023-10-12 18:45:06

问题解析:

这个问题需要找出1到100之间的所有质数。质数是指大于1且只能被1和自身整除的正整数。可以使用C++编写代码来解决。

算法思路:

1. 从2开始,依次检测每个数字是否为质数。
2. 对于一个待检测的数字,循环检测其能否被2到它自身的平方根之间的数字整除。
3. 如果不能被整除,则为质数,输出该数字并记录下来。
4. 继续检测下一个数字,直到所有数字都被检测完毕。

以下是修正后的代码实现:


#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int a = 2;
    cout << "质数有:" << a << " ";
    while (a <= 100) {
      bool is_prime = true;
      for (int i = 2; i <= sqrt(a); i++) {
            if (a % i == 0) {
                is_prime = false;
                break;
            }
      }
      if (is_prime) {
            cout << a << " ";
      }
      a++;
    }
    cout << endl;
    return 0;
}


在上面的代码中,我们使用了一个bool类型的变量is_prime来表示当前待检测的数字是否为质数。对于每个待检测的数字a,我们循环检测2到a的平方根之间的数字是否能够整除a,如果能够整除,则将is_prime置为false,表示该数字不是质数。如果在循环结束后发现is_prime仍然为true,则说明该数字为质数,输出该数字即可。

希望对你有所帮助!如果你还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 求1到100之间的质数,我的代码错在哪里