努力学c的小汪 发表于 2020-12-13 20:49:33

判断是否为素数的程序不知道哪里错了,跑完之后可以输入数字但不显示答案

#include<stdio.h>
int main()
{
        bool flag=1;
        int a;
        scanf("%d",&a);
       
        for(int b=2;2<=a/2;b++)
        {
                if(a%b==0)
                {
                        flag=0;
                }
        }
        if(flag)
        {
                printf("yes");
        }
        else
        {
                printf("no");
        }
       

        return 0;
}

努力学c的小汪 发表于 2020-12-13 21:17:46

求解{:10_266:}

jackz007 发表于 2020-12-13 21:19:21

本帖最后由 jackz007 于 2020-12-13 21:56 编辑

      这一句:
      for(int b=2;2<=a/2;b++)
      中间的条件部分:2<=a/2 在整个循环期间始终不变,这就意味着当 a < 4 的时候,无法进入循环,按照事先的逻辑设定,flag = true,没有问题,但是,当 a > 5 的时候,根据这个设定的循环条件,将会进入死循环,楼主所说的出不了结果,恐怕正是这个原因。

      下面是帮楼主修改过的代码,供楼主参考
#include<stdio.h>

int main()
{
      bool flag = false                            ;
      int a , b                                    ;
      scanf("%d" , & a)                            ;
      if(a > 1) {
                if(a % 2) {                                                 // 除了 2 ,所有的素数都是奇数
                        for(flag = true , b = 3 ; b * b < a + 1 ; b += 2) { // 除了 2 ,所有的素数都是奇数
                              if(b < a && ! (a % b)) {
                                        flag = false ;
                                        break      ;
                              }
                        }
                } else if(a == 2) flag = true      ;                      // 偶数中,2 是唯一一个素数
      }
      if(flag) printf("yes\n")                     ;
      else printf("no\n")                        ;
}

highc 发表于 2020-12-13 21:53:02

#include <stdio.h>
int main()
{
      int flag=1;
      int a,b;
      scanf("%d",&a);
      
      for(b=2;b<=a/2;b++)
      {
                if(a%b==0)
                {
                        flag=0;
                }
      }
      if(flag)
      {
                printf("yes");
      }
      else
      {
                printf("no");
      }
      

      return 0;
}

满不懂 发表于 2020-12-13 22:02:41

看看

努力学c的小汪 发表于 2020-12-13 22:28:41

jackz007 发表于 2020-12-13 21:19
这一句:

      中间的条件部分:2 5 的时候,根据这个设定的循环条件,将会进入死循环,楼主 ...

万分感谢!其实改一个字母也可以解决      for(int b=2;2<=a/2;b++)改成 for(int b=2;b<=a/2;b++)

卢同学 发表于 2020-12-14 16:33:23

大佬
页: [1]
查看完整版本: 判断是否为素数的程序不知道哪里错了,跑完之后可以输入数字但不显示答案