qwq,菜啊 是真的菜啊,又有很久没写过题了

按照题意来说:

一个数n的回文数可以理解为:他本身+他本身倒过来,要去掉倒过来以后的第一个字符

比如 12002 的回文数,就是

它本身: 12002

倒过来: 20021

去掉重复的2:0021

回文数:120020021

我这里写的比较懒,就调用了一下string的函数 reverse 反转字符串, erase删除字符,然后直接+

再把字符串转数字,注意,要转成longlong,所以要atol,

(感觉直接手写处理数字会更优雅一点

判素的话,看看数据范围 1e9,回文数字1e17, 普通的判素到ii<=ni*i <= n的话,大概是1e8左右,只有一个数字,看起来可以冲,就直接冲了

#include<iostream>
#include <algorithm>
using namespace std;

bool isprime(long long n)
{
    if(n ==1){return false;}
    for(long long i = 2 ;i*i <= n ; i++)
    {
        if(n%i == 0)
        {
            return false;
        }
    }
    return true;
}
int main()
{
    string t;
    cin >> t;
    string b = t;
    reverse(t.begin(),t.end());
    t.erase(t.begin());
    b += t;
    long long n = atol(b.c_str());
    if(isprime(n))
    {
        cout<<"prime"<<endl;
    }
    else{
        cout<<"noprime"<<endl;
    }
}