鱼C论坛

 找回密码
 立即注册
查看: 2108|回复: 4

[已解决]带你学C带你飞S1E15动动手第二题

[复制链接]
发表于 2022-2-27 16:18:24 | 显示全部楼层 |阅读模式
6鱼币
#include <stdio.h>

int main()
{
        int count = 2; // 已知2和3是素数
        int i, j;
        _Bool flag = 1;

        for (i = 5; i < 10000; i++)
        {
                for (j = 2; j < i / 2; j++)
                {
                        if (i % j == 0)
                        {
                                flag = 0;
                                break;
                        }
                }

                if (flag)
                {
                        count++;
                }
                else
                {
                        flag = 1;
                }
        }

        printf("10000以内共有%d个素数!\n", count);

        return 0;
}
不是很懂 if (flag)
                {
                        count++;
                }
                else
                {
                        flag = 1;
                }
我的理解是flag=0,则count++,否则flag为真,但这样的话又套不进去,例如5%2不等于0,则退出循环,在if那里属于真,但没有计数进去啊?count还是等于2
最佳答案
2022-2-27 16:18:25
以普遍的理性而言,你这理解有点错误
这个代码假定所有的数都是素数
前边的for 循环是找有无一个小于其本身且大于1的数能否整除,找到就将标志设置为假(0),然后退出到下边判断
如果当flag =0 时,表示该数不是素数,然后假定下一个数是素数 即有设置  flag = 1;


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int count = 2; // 已知2和3是素数
  5.         int i, j;
  6.         _Bool flag = 1; // 假定都是素数

  7.         for (i = 5; i < 10000; i++)
  8.         {
  9.                 for (j = 2; j < i / 2; j++)
  10.                 {
  11.                         if (i % j == 0) // 如果满足条件 这个数就不是素数
  12.                         {
  13.                                 flag = 0; // 设置不是素数的标志
  14.                                 break;
  15.                         }
  16.                 }

  17.                 if (flag) // 判断 标志
  18.                 {
  19.                         count++; // 是素数
  20.                 }
  21.                 else
  22.                 {
  23.                         flag = 1; // 假定下一个是素数
  24.                 }
  25.         }

  26.         printf("10000以内共有%d个素数!\n", count);

  27.         return 0;
  28. }
复制代码

最佳答案

查看完整内容

以普遍的理性而言,你这理解有点错误 这个代码假定所有的数都是素数 前边的for 循环是找有无一个小于其本身且大于1的数能否整除,找到就将标志设置为假(0),然后退出到下边判断 如果当flag =0 时,表示该数不是素数,然后假定下一个数是素数 即有设置 flag = 1;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-27 16:18:25 | 显示全部楼层    本楼为最佳答案   
以普遍的理性而言,你这理解有点错误
这个代码假定所有的数都是素数
前边的for 循环是找有无一个小于其本身且大于1的数能否整除,找到就将标志设置为假(0),然后退出到下边判断
如果当flag =0 时,表示该数不是素数,然后假定下一个数是素数 即有设置  flag = 1;


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int count = 2; // 已知2和3是素数
  5.         int i, j;
  6.         _Bool flag = 1; // 假定都是素数

  7.         for (i = 5; i < 10000; i++)
  8.         {
  9.                 for (j = 2; j < i / 2; j++)
  10.                 {
  11.                         if (i % j == 0) // 如果满足条件 这个数就不是素数
  12.                         {
  13.                                 flag = 0; // 设置不是素数的标志
  14.                                 break;
  15.                         }
  16.                 }

  17.                 if (flag) // 判断 标志
  18.                 {
  19.                         count++; // 是素数
  20.                 }
  21.                 else
  22.                 {
  23.                         flag = 1; // 假定下一个是素数
  24.                 }
  25.         }

  26.         printf("10000以内共有%d个素数!\n", count);

  27.         return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-27 17:42:00 | 显示全部楼层
大马强 发表于 2022-2-27 17:28
以普遍的理性而言,你这理解有点错误
这个代码假定所有的数都是素数
前边的for 循环是找有无一个小于其本 ...

哦哦懂了,谢谢。我可以再问一下下吗?我把代码运行但显示_Bool flag不在范围内是为什么?是不是这代码运行不了的,我是用devc++来运行的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-2-27 17:57:38 | 显示全部楼层
你这用不了吗?我这能用耶,要不换成这个
  1. int flag = 1; // 假定都是素数
复制代码

原来的是布尔型,只有两个值 真(1) 和 假(0)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-2-27 20:43:24 | 显示全部楼层
大马强 发表于 2022-2-27 17:57
你这用不了吗?我这能用耶,要不换成这个

原来的是布尔型,只有两个值 真(1) 和 假(0)

换了就可以也,之前的一直提示        [Error] '_Bool' was not declared in this scope,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 18:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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