一只学C的萌新 发表于 2021-10-6 10:19:03

萌新求助

#include <stdio.h>
#include <math.h>

int main()
{
    int n,i,m;
    long long a,k;

    scanf("%d",&m);

    for(i=0;i<m;i++)
    {
      scanf("%lld",&a);
    }

    for(i=0;i<m;i++)
    {
      int flag=0;
      k=(long long)sqrt((double)a);


      for(n=2;n<=k;n++)
      {
            if (a==2||a==1)
            {
                flag=1;
                printf("No\n");
            }

            else if(a%n==0)
            {
                flag=1;
                printf("No\n");
                break;
            }
      }
            if (flag==0)
            {
                printf("Prime\n");
            }

    }

    return 0;
}

为什么我输入2和1我总是输出素数,,明明我把他单独拿出来定义了啊
想不懂了已经

桃花飞舞 发表于 2021-10-6 10:49:29

本帖最后由 桃花飞舞 于 2021-10-6 10:53 编辑

当输入2和1 时flag 的值为0,所以总是输出素数,你是把它单独拿出来定义了,只是当输入2和1时k的值总是小于2,这时不进入for循环更不会运行你单独定义的1和2这块。你可以这么改      k=(long long)sqrt((double)a);


      for(n=2;n<=k;n++)
      {
            if(a%n==0)
            {
                flag=1;
                printf("No\n");
                break;
            }
      }
      if (a==2||a==1)
      {
            flag=1;
            printf("No\n");
      }
      if (flag==0)
      {
            printf("Prime\n");
      }

jhq999 发表于 2021-10-6 10:50:19

本帖最后由 jhq999 于 2021-10-6 11:16 编辑

看错了

一只学C的萌新 发表于 2021-10-6 14:17:01

桃花飞舞 发表于 2021-10-6 10:49
当输入2和1 时flag 的值为0,所以总是输出素数,你是把它单独拿出来定义了,只是当输入2和1时k的值总是小于 ...

弄明白了,谢谢大佬

一只学C的萌新 发表于 2021-10-6 14:51:57

jhq999 发表于 2021-10-6 10:50
看错了

没事,其实我没看懂你发的,但是我大为震撼,感觉好像是缩写
页: [1]
查看完整版本: 萌新求助