题解 | #素数回文#
素数回文
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;
}
