萌新求助
#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: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 11:16 编辑
看错了 桃花飞舞 发表于 2021-10-6 10:49
当输入2和1 时flag 的值为0,所以总是输出素数,你是把它单独拿出来定义了,只是当输入2和1时k的值总是小于 ...
弄明白了,谢谢大佬 jhq999 发表于 2021-10-6 10:50
看错了
没事,其实我没看懂你发的,但是我大为震撼,感觉好像是缩写
页:
[1]