# include <stdio.h>
# include <math.h>
bool IsPrime(int x)
{
int i;
for (i=2; i<=sqrt(x); ++i)
{
if (x%i == 0)
break;
}
if (i == sqrt(x)+1)
return true;
else
return false;
}
int main(void)
{
int i;
int m;
scanf("%d", &m);
if (IsPrime(m))
printf("Yes!\n");
else
printf("No!\n");
return 0;
}
为什么我无论输入什么数,输出的都是No?
我是故意用sqrt的,想减少循环次数,为什么输出总是No?
求大神指教
1 回答
已采纳
小画冰
TA贡献3条经验 获得超2个赞
问题在14行,sqrt(x)不一定是整数,而i是整数,sqrt(x)加1后可能会d大于sqrt(x)后面的那个整数。比如,根号17的值约为4.123,加1后即sqrt(x)+1=5.123,那么要i就不等于5.123,此时return false。实际上我们只要i=5就可以了,所以应该改为if(i==(int)sqrt(x)+1)或if(i>sqrt(x))
- 1 回答
- 0 关注
- 2274 浏览
添加回答
举报
0/150
提交
取消