1002 素数回文 试除法

链接:https://ac.nowcoder.com/acm/contest/26656/1002
来源:牛客网

题目描述

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

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不是素数的回文数。

分析

创建好回文数,再判断一下是不是素数就可以了

需要关注的是,数要开long long ,然后字符串的erase 参数是迭代器。

//-------------------------代码----------------------------

#define int ll
const int N = 1e5+10;
int n,m;

void solve()
{
string s;
cin>>s;
string tmp = s;
reverse(all(tmp));

tmp.erase(tmp.begin());
s += tmp;
// cout<<s<<endl;
int x = 0;
for(int i = 0;i<s.size() ;i ++ ) {
x = x * 10 + s[i] - '0';
}
// if(x == 1) {
// cout<<"noprime"<<endl;rt;
// }
for(int i = 2;i <= x / i;i++) {
if(x % i == 0) {
cout<<"noprime"<<endl;rt;
}
}
cout<<"prime"<<endl;
}

signed main(){
clapping();TLE;

// int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}

/*样例区


*/

//------------------------------------------------------------

 

posted @ 2022-07-24 17:16  er007  阅读(46)  评论(0编辑  收藏  举报