猿问

#C语言#运用函数,判断一个数是否为素数

# 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?
求大神指教


我要变大神大神大大神
浏览 2275回答 1
1回答

小画冰

问题在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))
随时随地看视频慕课网APP
我要回答