求教C语言大神【可逆素数的判断】

求教C语言大神【可逆素数的判断】,第1张

#include<stdio.h>

#include<math.h>

main()

{

int i,k,m,b=0

scanf("%d",&i)

if(i==1)

{

printf("no\n")/* 判断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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12272314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存