题目
题目描述
现在给出一个素数,这个素数满足两点:
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不是素数的回文数。
题解
思路
思路很简单就是把输入数按规则做成回文数,然后判断一下是不是素数就好了。(时间复杂度是1e8.5,一般时间复杂度在5e8之内都不会超时,所以不会超时)。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll pan(ll x)//素数判断
{
if(x==1) return 1;
if(x==2) return 0;
for(ll i=2;i<=sqrt(x);i++) if(x%i==0) return 1;
return 0;
}
int main()
{
ll t;cin>>t;
ll cnt=0,num1=t,num2=t/10,x=1;
while(num1>0) {cnt++,t*=10,x*=10,num1/=10;}
x/=100,t/=10;
while(num2>0)
{
t+=(num2%10)*x;
num2/=10,x/=10;
}
if(pan(t))cout<<"noprime"<<endl;
else cout<<"prime"<<endl;
return 0;
}