#include<math.h>
main()
{
int i,k,m,b=0
scanf("%d",&i)
if(i==1)
{
return
}
k=sqrt(i)
for(m=2m<=km++)
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=2m<=km++)
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那样。
#include<stdio.h>int isPrimenum(int n)
{
int i
int flag=0
for(i=2i<ni++)
if(n%i==0)
{
flag=1
break
}
if(flag==1)
return 1
else
return 0
}
int rever(int n)
{
int temp=0,m=0
do{
temp=temp*10+n%10
n/=10
}while(n)
printf("temp=%d\n",temp)
m=isPrimenum(temp)
if(!m)
return 0
else
return 1
}
int main()
{
int n=0,d=0,m=0
printf("input n:")
scanf("改慧%d",&n)
d=isPrimenum(n)
printf("n=%d\n",n)
m=rever(n)
if(!d&&!m)
printf("%d is 族歼渣reverprimenum\n",n)
else
printf("不兆悄是\n")
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)