int m,i,k; scanf("%d",&m); k=(int)sqrt(m); for(i=2;i<=k;i++) i f(m%i==0)break; if(i>=k) printf("%d
是素数\n",m);elseprintf("%d不是素数\n",m);}问题一:if(i>=k)printf("%d是素数\n",m);难道for没有排除完吗问题二:in...
是素数\n",m);
else
printf("%d 不是素数\n",m);
}
问题一:
if(i>=k)
printf("%d 是素数\n",m);
难道for没有排除完吗
问题二:
intsqrt(m);前面的int是不是都可以不用写 展开
else
printf("%d 不是素数\n",m);
}
问题一:
if(i>=k)
printf("%d 是素数\n",m);
难道for没有排除完吗
问题二:
intsqrt(m);前面的int是不是都可以不用写 展开
2012-11-21
展开全部
问题一没弄明白你想问什么,根据我的经验你的程序for循环当中应该少一部分
问题二:可以不用写,加int这样表示强制转换,因为已经定义k为int型变量,所以赋值时会根据k的类型赋值,所以不用加int也可以得到想要的结果。不懂可以看谭浩强c语言,那上面讲得很清楚。
问题二:可以不用写,加int这样表示强制转换,因为已经定义k为int型变量,所以赋值时会根据k的类型赋值,所以不用加int也可以得到想要的结果。不懂可以看谭浩强c语言,那上面讲得很清楚。
追问
就是
if(i>=k)
printf("%d 是素数\n",m);
是什么意思呢为甚么i>=k呢
追答
你看一下上面那个for循环里的判断,如果要检验的数m能被i整除则跳出,break的功能是不执行本次循环后面的语句,并且跳出循环,不再执行。如果一直都不能整除,循环结束时i已经自加到k,这说明这个m除了1跟它自身没有其他的约数了,它是一个素数;如果出现整除,执行break跳出循环,这时的i一定是小于k的一个数,所以,用
if(i>=k)
printf("%d 是素数\n",m);
这条语句才能最终判断是不是素数,这样说你能明白吗???
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询