【C语言】牛客网 BC157 素数回文

132 阅读2分钟

描述
现在给出一个素数,这个素数满足两点:

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;
}