littleshu 发表于 2020-8-2 11:28:57

关于例题求素数改写后所遇问题

问题描述:我改写了求素数的例题,运行时无报错信息。输入12,不是素数,13,是素数。但81,15却还是显示为素数。(Linux下gcc编译器)

改写源码:
#include <stdio.h>

int main()
{
      int i, num;
      _Bool flag = 0;
      
      printf("请输入一个整数:");
      scanf("%d", &num);
      
      for (i = 2; i < num / 2; i++)
      {
                if (num % i)
                {
                        flag = 1;
                        break;
                }
                else
                {
                        flag = 0;
                        break;
                }
      }
      if (flag)
      {
                printf("%d是一个素数\n", num);
      }
      else
      {
                printf("%d不是素数\n", num);
      }
      
      return 0;
}运行结果:{:10_266:}



例题源码:
#include <stdio.h>

int main()
{
      int i, num;
      _Bool flag = 1;
      
      printf("请输入一个整数:");
      scanf("%d", &num);
      
      for (i = 2; i < num / 2; i++)
                if (num % i == 0)
                {
                        flag = 0;
                }
      }
      if (flag)
      {
                printf("%d是一个素数!\n", num);
      }
      else
      {
                printf("%d不是一个素数!\n", num);
      }
      
      return 0;
}例题运行结果:



使用DevC++:{:10_282:}

baige 发表于 2020-8-2 11:28:58

littleshu 发表于 2020-8-2 11:35
可以简单解释一下吗?

例如9 当9%2!=0是你的程序flag=1就会退出循环,结果导致显示是一个素数,不会继续进行%3之后的操作

zltzlt 发表于 2020-8-2 11:30:21

请见:https://fishc.com.cn/thread-173223-1-1.html

baige 发表于 2020-8-2 11:31:59

本帖最后由 baige 于 2020-8-2 11:33 编辑

#include <stdio.h>

int main()
{
      int i, num;
      _Bool flag = 0;
      
      printf("请输入一个整数:");
      scanf("%d", &num);
      
      for (i = 2; i < num / 2; i++)
      {
                if (num % i)
                {
                        flag = 1;// break去掉;当num%i!=0需要继续向下判断,是否可以被i整除
                }
                else
                {
                        flag = 0;
                        break;
                }
      }
      if (flag)
      {
                printf("%d是一个素数\n", num);
      }
      else
      {
                printf("%d不是素数\n", num);
      }
      
      return 0;
}

littleshu 发表于 2020-8-2 11:32:23

zltzlt 发表于 2020-8-2 11:30
请见:https://fishc.com.cn/thread-173223-1-1.html

这不是关键啊{:10_277:}

littleshu 发表于 2020-8-2 11:35:17

baige 发表于 2020-8-2 11:31


可以简单解释一下吗?{:10_250:}

baige 发表于 2020-8-2 11:42:10

#include <stdio.h>

int main()
{
      int i, num;
      _Bool flag = 0;
      
      printf("请输入一个整数:");
      scanf("%d", &num);
      
      for (i = 2; i < num / 2; i++)
      {
                if (num % i != 0)// 当n%i不等于0时,需要继续进行循环,保证到num/2时n仍然不能被i整除
                {
                        flag = 1;// break去掉;当num%i!=0需要继续向下判断,是否可以被i整除
                }
                else
                {
                        flag = 0;
                        break; // 当被i整除时说明该数不是素数
                }
      }
      if (flag == 1)
      {
                printf("%d是一个素数\n", num);
      }
      else // flag == 0;
      {
                printf("%d不是素数\n", num);
      }
      
      return 0;
}

littleshu 发表于 2020-8-2 11:42:26

baige 发表于 2020-8-2 11:28
例如9 当9%2!=0是你的程序flag=1就会退出循环,结果导致显示是一个素数,不会继续进行%3之后的操作

谢谢谢谢{:10_281:}
页: [1]
查看完整版本: 关于例题求素数改写后所遇问题