鱼C论坛

 找回密码
 立即注册
查看: 1417|回复: 2

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

[复制链接]
发表于 2023-10-12 18:43:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 的值,解决了判断错误的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,则说明该数字为质数,输出该数字即可。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表