题解 | #素数回文#
素数回文
https://www.nowcoder.com/practice/d638855898fb4d22bc0ae9314fed956f
#include <stdio.h> #include<math.h> int main() { int flag=1; int i=0,j=0; long n=0,m=0; int arr[10]={0}; scanf("%ld",&n); int c=n;//后面有用到n,所以用c替换。 while(c)//提取n中的所有素 { m=c%10; c/=10; arr[i]=m; i++;//i表示有几位数 } for(j=0;j<i-2;j++)//判断是否为递增或递减 { if(arr[j]<arr[j+1]&&arr[j+1]<arr[j+2]||arr[j]>arr[j+1]&&arr[j+1]>arr[j+2]) { flag=1; } else flag=0; } if(flag) { for(j=1;j<i;j++)//产生回文数,这里n用长整形,int类型例子中会溢出 { n*=10; n+=arr[j]; } for(int p=2;p<sqrt(n);p++)//判断是否为素数(不用sqrt(n)会报错,时间太久了(暴力求解)QAQ) { if(n%p==0) { flag=0; break; } } } if(flag) { printf("prime"); } else { printf("noprime"); } return 0; }