关于判断一个数是否为素数的程序,该怎么解决

关于判断一个数是否为素数的程序
int fun(int s)
{ int i;
  int a=1,b=0;
for(i=2;i<s;i++)
{
if(s%i==0)/*判断是否为素数的条件,因为素数只有1和本身这两个因数*/
break;
}
if(i==s)/*如果能执行到s,说明因数不止两个*/
return a;
else
return b;
}
main()
{
int m;
scanf("%d",&m);
if(fun(m))
printf("yes\n");
else
printf("no\n");
return 0;
}
这个程序是我后来修改了的,vc上可以运行
但是有一个疑问
在调用函数fun()里面
如果不去定义a和b,后来我改成return一个true或者false
结果编译的时候,vc给个警告说true还有false是未经定义的,难道c里面连真假值都未定义?
我看了别个的程序也有写true,false的啊?
求解。。。。

------解决方案--------------------
那别个程序肯定是提前定义了该变量的
还有
for 循环里面不需要i<s 检验s步
i<s/2 就可以 减少算法复杂度
------解决方案--------------------
举个例子:18 的因子:2*9,3*6;因子都分布在18/2=9的两边,只要检查一边就好了;其实小于等于取根号就够了。。。。
探讨
如果用s/2
那万一里面有的因数是在后半部分呢?

引用:

那别个程序肯定是提前定义了该变量的
还有
for 循环里面不需要i<s 检验s步
i<s/2 就可以 减少算法复杂度

------解决方案--------------------
for循环里面改成for(i=2;i<s/2;i++)
输入一个29就显示no,但是29是素数啊


for循环里面改成for(i=2;i<(sqrt(s));i++)
应该对s开平方,这才是循环次数最少的