链接:https://ac.nowcoder.com/acm/contest/19859/C
来源:牛客网
题目描述
现在给出一个素数,这个素数满足两点:
1、 只由1-9组成,并且每个数只出现一次,如13,23,1289。
2、 位数从高到低为递减或递增,如2459,87631。
请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。
输入描述:
输入只有1行。
第1行输入一个整数t,保证t为素数。
数据保证:9<t<109
输出描述:
输出一行字符串,如果t的回文数仍是素数,则输出“prime”,否则输出"noprime"。
示例1
输入
13
输出
prime
说明
13的回文数是131,131是素数
示例2
输入
17
输出
noprime
说明``
17的回文数是171,171不是素数(因子有3)
备注:
素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
素数的回文数为题意中的定义,1331不是素数的回文数
解决方案
#include<stdio.h>
#include<math.h>
typedef long long ll;
int main()
{
ll n;
scanf("%lld",&n);
ll tn=n;
while(tn/10)//求出回文数:以13为例
{
tn/=10;//13/10=1,再返回循环条件不满足
n=n*10+tn%10;//n=1*10+1%10=131,因此131就是13的回文数
}
ll i;
for(i=2;i<=sqrt(n);i++)
{//判断生成的回文数是否为素数
if(n%i==0)
{
printf("noprime");
return 0;
}
}
printf("prime");
return 0;
}