匿名用户
1级
2012-11-03 回答
#include
#include
main()
{
int i,k,m,b=0;
scanf("%d",&i);
if(i==1)
{
printf("no\n");/* 判断1不是素数 */
return;
}
k=sqrt(i);
for(m=2;m<=k;m++)
if(i%m==0){
printf("no\n");/* i不是素数,输出no */
return;
}
if(m*m>i) /* i是素数 */
{
while (i!=0)
{
b=b*10+i%10;
i=i/10;
}
k=sqrt(b);
/* 求i的可逆 */
for(m=2;m<=k;m++)
if(b%m==0){
printf("no\n");/* i的可逆不是素数,no */
return;
}
if(m*m>b)
printf("yes\n");/* i的可逆也是素数,yes */
}
}
尽量按照原有的风格来改。主要是多添加了几个return,还有改了2处if(i*i>m)改为if(m*m>i)。第一个else如果不加{}则只对else后面一行有效。我加了return后,干脆去掉第一个else。
问:不加return有什么错误?
答:判断为"no"后,不一定m*m不一定就大于i。
全部都在main中搞定,不太好,好的风格应该有缩进,并且科学地分多个函数来实现,就像zls4r那样。
追问:
请问:return不是返回么?返回到哪里呢?还有zls4r又是什么?
追答:
return是返回,这里是于结束main的执行。即遇到return就跳出main。跳出main就是整个程序执行结。zls4r是另一位回答你的问题的网友。