描述
现在给出一个素数,这个素数满足两点:
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不是素数的回文数。
分析
1.第一步:输入不需要做要求,只需要人为的输入范围内的素数即可
2.第二步:求输入数的回文数
3.第三步:判断回文数是否为素数
4.第四步:输出
代码实现
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d", &n);//输入
int k = n;//将输入值赋给临时变量k
int temp = 0;
int ret = 0;
int cnt = 0;
while (k)//求出k倒置后的数字ret 例如k=123 则ret=321
{
temp = k % 10;//123
k /= 10;
ret = ret * 10 + temp;
cnt++;
}
n /= 10;//将n的最后一位去掉 便于形成回文数
long long int m = n * pow(10, cnt) + ret;//将n和ret首尾相连形成回文数
int i = 0;
for (i = 2; i <= sqrt(m); i++)//判断回文数是否为素数
{
if (m % i == 0)
{
printf("noprime");//如果是不是素数打印
return 0;
}
}
printf("prime");//如果是素数打印
return 0;
}